JSFiddle - React, Tailwind, and code Playground
HTML
<script src="http://code.jquery.com/jquery-2.1.3.js"></script>
JavaScript
console.log(isArrayLike(document.getElementsByTagName('body')) === true, 1);
console.log(isArrayLike(document.querySelectorAll('body')) === true, 2);
console.log(isArrayLike([1]) === true, 3);
console.log(isArrayLike({0:1, length:1}) === true, 4);
console.log(isArrayLike({length:1, height:2}) === false, 5);
console.log(isArrayLike(window) === false, 6);
console.log(isArrayLike((function() {})) === false, 7);
console.log(isArrayLike({foo: NaN, length: 1}) === false, 8);
console.log(isArrayLike({'12.24': 1, length: 1}) === false, 9);
console.log(isArrayLike('') === false, 10);
console.log(isArrayLike('1') === false, 11);
var array1 = [];
array1[4] = 0;
console.log(isArrayLike(array1) === true, 12);
console.log(isArrayLike(null) === false, 13);
console.log(isArrayLike(new jQuery()) === true, 14);
(function() {
console.log(isArrayLike(arguments) === true, 15);
}());
console.log(isArrayLike({length:0, height:2}) === false, 16);
// console.log(isArrayLike(new ArrayBuffer()) === true, 17);
function isArrayLike(item) {
if(typeof item !== 'object') return false;
if(item === null) return false;
if(item === window) return false;
if(!('length' in item)) return false;
if(item.length === 0) return true;
return (item.length - 1) in item;
}