我有一个数组将取n个值,但是这些值将被添加到不同的索引在不同的时间。但是,我需要在特定时间的阵列长度。稀疏数组的长度
案例1
var a = [1,2,3,3,4]
a.length //Returns 5 - OK
案例2
var a =[]
a[20] = 2
a.length //Returns 21 but I would like it to return 1
如何获得长度1
为情况下2?
我有一个数组将取n个值,但是这些值将被添加到不同的索引在不同的时间。但是,我需要在特定时间的阵列长度。稀疏数组的长度
案例1
var a = [1,2,3,3,4]
a.length //Returns 5 - OK
案例2
var a =[]
a[20] = 2
a.length //Returns 21 but I would like it to return 1
如何获得长度1
为情况下2?
如果您可以使用underscore或lodash。你可以试试这样的
var arrLen = _.compact(youArr).length;
如果你想使用纯粹的JS ..你需要编写简单的功能。这将计算不等于假的元素数量。
var len = 0;
arr.forEach(function(el){
if (el) {count++;}
});
console.log(len);
希望这会有所帮助。
你真棒。我正在用'lodash'而不是'underscore'。谢谢! –
如果您需要计数未未定义的元素个数:
var a = [];
a[20] = 2;
// count number of elements in a that are not undefined
var count = a.filter(x => typeof x !== 'undefined').length;
console.log(count); // prints 1
或者,也可以不用创建一个新的数组来查看它有多少个元素,只需使用'.reduce()'返回一个数字。 – vlaz
您可以用Array#forEach
计算的项目。
forEach()
执行提供的回调一次本升序对数组中的每个元素。对于已删除或未初始化的索引属性(即在稀疏数组上),不会调用它。
var a = [1, 2, 3, 3, 4];
console.log(a.length); // 5
a[20] = 2;
console.log(a.length); // 21
var length = 0;
a.forEach(function() { length++; });
console.log(length); // 6
我认为像这样将满足您的需求,虽然目前还不清楚为什么你会放一个元素到第20位。
function dynlength(array) {
var length = 0;
for (var i = 0; i < array.length; i++)
if (array[i] !== undefined) length++;
return length;
}
first var a = []; 到阵列中元素的返回长度为
当你说一个[20] ='x';
阵列实际上得到21元(以设置为你的价值20元),初始化并记住21元素的数组中数
,如果你想自定义值尝试在循环迭代为
var count=0;
for(var i=0;i<a.length;i++)
{
if(a[i]!=undefined)
{
count++;
}
}
console.log(count);
使用arr.length属性将返回包含'洞'的总长度
您可以使用forEach()方法跳过数组中的孔。
var arr1 = [];
var count = 0;
arr1[20] = 2;
alert(arr1.length);// this will always return including 'holes'
arr1.forEach(function(ele, i) { //this will skip the holes and will take real values into account
count++;
});
alert(count);
您还可以检查每个索引中的“未定义”值并添加到count变量中。但要小心使用'未定义'来清空数组中的'洞'。
很多问题的答案建议要么通过数组循环或创建一个新的数组,然后计算该(什么_.compact
一样)。我认为所有这些都是错误的方法,因为使用.reduce
使得这完全无关紧要。
var arr = [];
arr[7] = 1;
arr[17] = 2
arr[33] = 0;
arr[9001] = 4
var count = arr.reduce(x => x+1, 0);
console.log(count);
它是一条线或19个字节的代码来做到这一点。这是因为.reduce
将而不是经过数组中的空白点,因此它只会访问显式填充的indeces。然后就算这些。
要知道,如果你有明确设置为undefined
任何的indeces,他们所证明仍然算作填充。所以,如果是这样的话,那么你就需要在回调考虑到它,例如
var arr = [];
arr[17] = 2
arr[42] = undefined
var count = arr.reduce(x => x+1, 0);
console.log(count);
var filteredCount = arr.reduce((x, value) => typeof value !== "undefined" ? x+1 : x, 0);
console.log(filteredCount);
可以算阵列的“钥匙”(即人口指数):
Object.keys(arr).length
让它返回1的唯一方法是在其中只有1个元素...'a [0] = 2'或者你是否想要'length'返回数字具有价值的元素? – Archer
为什么你想把元素放在第20位?如果没有,你可以‘我这样做,因为这是可能的‘’*这听起来有些不可思议使用'推” @PraneshRavi *推动要素英寸 – SachiDangalla
’! –