我有一个这样的对象:
MyObject {
Object1: ["12345", "67890"]
Object2: ["74185"]
Object3: ["29630", "789654"]
}
我需要获得元素的总数。在这个例子中,我应该得到5.我试图以最有效的方式做到这一点。
答案 0 :(得分:5)
使用for
循环遍历对象,在递增长度计数器之前检查以确保密钥是数组:
var count = 0;
for (var key in MyObject)
if (MyObject[key] instanceof Array)
count += MyObject[key].length;
var MyObject = {
Object1: ["12345", "67890"],
Object2: ["74185"],
Object3: ["29630", "789654"]
}
var count = 0;
for (var key in MyObject)
if (MyObject[key] instanceof Array)
count += MyObject[key].length;
console.log(count);

答案 1 :(得分:2)
您可以将reduce
用于所有内容!
var totalLength = Object.keys(MyObject).reduce(function(total, key) {
return total += MyObject[key].length;
}, 0);
答案 2 :(得分:1)
您需要迭代地图的所有键并总结每个数组的长度。
执行此操作的功能方式:
function add(a, b) { return a + b; }
Object.keys(test).map(function(key) {
return test[key].length
}).reduce(add);
或者,如果您使用的是后一个Node.js版本之一:
Object.keys(test).map(key => test[key].length).reduce((a, b) => a + b)
答案 3 :(得分:1)
我知道我迟到了,但为了完整起见,这里是我使用 ES2019 引入的方法 <Array>.flat()
的方法。首先,您可以使用 Object.values()
获取所有数组,然后使用 goto = "Y"
__goto = (False,True)[goto=="Y"]
将所有数组合并在一起以获得总长度。
由于 flat()
方法默认一次只展平一个 层,因此您可以将 flat()
作为参数(深度)传递。
就代码长度而言,这是迄今为止我见过的解决您问题的最有效方法。
2
如果 const myobject = {
Object1: ["12345", "67890"],
Object2: ["74185"],
Object3: ["29630", "789654"],
};
console.log(Object.values(myobject).flat(2).length);
有嵌套数组,您也可以使用 Infinity
。只是为了确定;)
myobject
答案 4 :(得分:0)
使用for in
循环迭代所有对象,并通过查找数组的长度来添加计数。
使用for in
时,建议使用hasOwnProperty()
以避免由于原型继承而迭代不必要的属性。
var count = 0;
for (var key in MyObject) {
if (MyObject.hasOwnProperty(key)) {
count += MyObject[key].length;
}
}
console.log(count);
答案 5 :(得分:0)
您可以考虑以下代码:
Object.keys()
“循环”对象属性。length
的属性array
来了解数组中有多少项。count
。请注意,您的MyObject
格式不正确,因为:
var myObject = {
Object1: ["12345", "67890"],
Object2: ["74185"],
Object3: ["29630", "789654"]
};
var count = 0;
Object.keys(myObject).map(function(prop) {
count+= myObject[prop].length;
});
alert(count);