只是想知道,当你使用array.length它时,获取最后一个索引值并添加一个.如果您有一个数组,由于某种原因以这种方式定义,该怎么办:
var myArray2 =[];
myArray2[10]='x';
myArray2[55]='x';
Run Code Online (Sandbox Code Playgroud)
获得此阵列真实长度的绝对最佳方法是什么?会返回2作为值的东西.
我正在考虑这样的事情,但不确定是否已有一种方法,或者是否有更快的实现.
Array.prototype.trueLength= function(){
for(var i = 0,ctr=0,len=myArray2.length;i<len;i++){
if(myArray2[i]!=undefined){
ctr++;
}
}
return ctr;
}
console.log(myArray2.trueLength());
Run Code Online (Sandbox Code Playgroud)
Zir*_*rak 10
Array.prototype.reduce 只遍历现有索引,所以你可以这样做:
var length = myArray2.reduce(function(sum) {
return sum+1;
}, 0);
Run Code Online (Sandbox Code Playgroud)
"但是齐拉克叔叔!reduce杀死了我的父母!" 别担心,年轻人,我们可以使用Array.prototype.filter!
var length = myArray2.filter(function(item, idx) {
return idx in myArray2;
}).length;
Run Code Online (Sandbox Code Playgroud)
"所有这些阵列都很无聊!" 嗯,whadya想到这个!?
Object.keys(myArray2).length;
Run Code Online (Sandbox Code Playgroud)
"但是......但......但Zirak !!!!我们是阿米什人,我们还没有ECMAScript 5!" 没有恐惧,齐拉克在这里!
for (var length = 0, i = 0; i < myArray2.length; i++) {
if (i in myArray2) {
length += 1;
}
}
Run Code Online (Sandbox Code Playgroud)
但有时这样,人们不禁要问:为什么要这样做并且违背数组的目的,一个结构化的构造,而不是使用其他适合其目的的东西?
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |