大家好!
昨天我们建立了看似阵列的物件,其实它就是接下来要介绍的伪阵列物件(Array-like Object)。
我们进入今天的主题吧!
因为伪阵列不是真正的阵列,因此定义也是见仁见智,但是一般都有下列特性:
typeof arrarlike; // 'object'
typeof arraylike.length; // 'number'
对了,既然有 Array
有 isArray
这个静态方法,那麽有没有辨识伪阵列的方法呢?
这是当然的,实作就像这样:
Felix.isArrayLike = function (item) {
return (
Array.isArray(item) || (
!!item &&
typeof item === 'object' &&
typeof item.length === 'number' && (
item.length === 0 || (
item.length > 0 &&
item.length - 1 in item
)
)
)
);
};
试试看:
/* 伪阵列就是伪阵列 */
Felix.isArrayLike(new Felix('body')); // true
/* 阵列也属於伪阵列 */
Felix.isArrayLike([]); // true
/* 物件不属於伪阵列 */
Felix.isArrayLike({}); // false
forEach
方法Array
有一个 forEach
静态方法,用途就像是用回圈将阵列的元素逐一操作。
伪阵列就没有这个方法了,但是我们也能靠自己实作一个:
Felix.forEach = function (obj, callback, args) {
var i;
if (this.isArrayLike(obj)) {
for (i = 0; i < obj.length; i++) {
if (callback.apply(obj[i], args) === false) break;
}
} else {
for (i in obj) {
if (callback.apply(obj[i], args) === false) break;
}
}
return obj;
};
如果是阵列或伪阵列,就将元素遍历一次(不含 length
);如果是物件,则将所有属性都遍历一次。
差不多也到尾声了。
如果对文章有任何疑问,也欢迎在下方提问和建议!
我是 Felix,我们明天再见!
>>: [第十八只羊] 迷雾森林舞会XII Hotwire 101
参考文件 https://kubernetes.io/docs/tasks/configure-po...
前言 前一篇我们聊了一些字典有趣的取值方式,所以接下来我想接着继续聊关於字典的部分。 字典取值 在 ...
昨天稍微谈到了一些有关警报的设计,然而,警报的发出与否,应是建立在我们观测到的一些系统的行为,例如说...
Hash 在其他语言称为Object, Dictionary,但无论是在哪个程序语言中,Hash 和...
在之前的开发过程中,会发现整个main.go越来越长,在阅读理解上会相对没有那麽直觉且快速,因此接下...