Javascript 索引不是连续整数的数组的长度
只需在数组的最后一个数字索引中添加一个JavaScript的本机Javascript 索引不是连续整数的数组的长度,javascript,arrays,Javascript,Arrays,只需在数组的最后一个数字索引中添加一个JavaScript的本机.length属性,即可实现此功能。。。有人有一个很好的解决方案来获取索引不连续的数组的实际元素长度吗 //连续索引数组。长度工作正常! var测试_数组=[4,5,6,7,8]; $('#索引数组').html(“连续索引数组长度:“+test#u array.Length”); //非连续索引数组。长度无BUENO! var测试_数组=[]; 测试_数组[1]=1; 测试_数组[3]=2; 测试_数组[7]=3; $('#非连
.length
属性,即可实现此功能。。。有人有一个很好的解决方案来获取索引不连续的数组的实际元素长度吗
//连续索引数组。长度工作正常!
var测试_数组=[4,5,6,7,8];
$('#索引数组').html(“连续索引数组长度:“+test#u array.Length”);
//非连续索引数组。长度无BUENO!
var测试_数组=[];
测试_数组[1]=1;
测试_数组[3]=2;
测试_数组[7]=3;
$('#非连续索引数组').html(“非连续索引数组长度:“+test#u array.Length”)代码>
使用,因为它只迭代数组中赋值为的属性(无论值是什么!)
回调
仅对具有赋值的数组的索引调用;对于索引
,它不会被调用,这些索引已删除,或者从未被赋值。未通过回调测试的数组元素被跳过,并且未包含在新数组中。[strong]
var测试_数组=[4,5,6,7,8];
$('#索引数组').html(“连续索引数组长度:“+test#u array.Length”);
var测试_数组=[];
测试_数组[1]=0//错误的值不会被忽略
测试_数组[3]=2;
测试_数组[7]=3;
测试_数组[11]=未定义//错误的值不会被忽略
var filteredArray=test_array.filter(对象)//或test_array.filter(函数(){return true;})
$('#非连续索引数组').html(“非连续索引数组长度:“+filteredArray.Length”)代码>
只迭代数组中赋值为的属性(无论值是什么!)
回调
仅对具有赋值的数组的索引调用;对于索引
,它不会被调用,这些索引已删除,或者从未被赋值。未通过回调测试的数组元素被跳过,并且未包含在新数组中。[strong]
var测试_数组=[4,5,6,7,8];
$('#索引数组').html(“连续索引数组长度:“+test#u array.Length”);
var测试_数组=[];
测试_数组[1]=0//错误的值不会被忽略
测试_数组[3]=2;
测试_数组[7]=3;
测试_数组[11]=未定义//错误的值不会被忽略
var filteredArray=test_array.filter(对象)//或test_array.filter(函数(){return true;})
$('#非连续索引数组').html(“非连续索引数组长度:“+filteredArray.Length”)代码>
您可以使用Object.keys
然后获取长度
var array = [];
array[1] = 1;
array[3] = 3;
console.log(array.length); // 4
console.log(Object.keys(array).length); // 2
Object.keys
实际上用于获取对象的属性/键
var obj = {a:'a', b:'b'};
Console.log(Object.keys(obj)); // ["a", "b"]
var arr = [1,2,3];
console.log(Object.keys(a)); //["0", "1", "2"]
您可以使用Object.keys
,然后获取长度
var array = [];
array[1] = 1;
array[3] = 3;
console.log(array.length); // 4
console.log(Object.keys(array).length); // 2
Object.keys
实际上用于获取对象的属性/键
var obj = {a:'a', b:'b'};
Console.log(Object.keys(obj)); // ["a", "b"]
var arr = [1,2,3];
console.log(Object.keys(a)); //["0", "1", "2"]
你可以使用和计数
var测试_数组=[,1,2,7],
count=测试数组.reduce(r=>r+1,0);
控制台日志(计数)代码>您可以使用和计数
var测试_数组=[,1,2,7],
count=测试数组.reduce(r=>r+1,0);
控制台日志(计数)
arr.filter(Object)。length
在对象返回真ish时起作用,filter()跳过孔。arr.filter(Object)。length
在对象返回真ish时起作用,filter()跳过孔。这会不会给[1,未定义,2]
带来麻烦?为什么还要手工编写回调代码呢?好吧,上面的代码似乎去掉了设置为undefined
value的元素,而不仅仅是那些不是自己属性的元素(比如那些通过设置比元素计数更高的长度隐式定义的元素)。。。如果您只想删除孔,则[].filter()
回调每次都应返回true。r=[1,未定义,2];r、 长度=99
-r
使用该工具应计算3个显式元素(而不是2个)。查看[].filter()如何在引擎盖下工作,它使用if(输入arr)
,因此任何返回true的内容都有效:r=[1,未定义,2];r、 长度=99;r、 过滤器(Boolean.bind(1,1)).length==3
我喜欢Object
,所以我不必手工编写回调代码或绑定某个东西,但同样地,任何总是返回true的东西都可以工作。Object
总是返回一个对象,无论您向它馈送什么,并且对象总是true。实际上,您正在寻找的Droid隐藏在[]的本机实现中。filter,请查看polyfill源代码(并且u.filter不是polyfill),这会不会给[1,未定义,2]
带来麻烦?为什么还要手工编写回调代码呢?好吧,上面的代码似乎去掉了设置为undefined
value的元素,而不仅仅是那些不是自己属性的元素(比如那些通过设置比元素计数更高的长度隐式定义的元素)。。。如果您只想删除孔,则[].filter()
回调每次都应返回true。r=[1,未定义,2];r、 长度=99
-r
使用该工具应计算3个显式元素(而不是2个)。查看[].filter()如何在引擎盖下工作,它使用if(输入arr)
,因此任何返回true的内容都有效:r=[1,未定义,2];r、 长度=99;r、 过滤器(Boolean.bind(1,1)).length==3
我喜欢Object
,所以我不必手工编写回调代码或绑定某个东西,但同样地,任何总是返回true的东西都可以工作。Object
总是返回一个对象,无论您向它馈送什么,并且对象总是true。机器人是一个机器人