Javascript:对象的总长度

时间:2016-07-01 12:35:50

标签: javascript arrays object

我有一个这样的对象:

MyObject { 
  Object1: ["12345", "67890"]
  Object2: ["74185"]
  Object3: ["29630", "789654"]
}

我需要获得元素的总数。在这个例子中,我应该得到5.我试图以最有效的方式做到这一点。

6 个答案:

答案 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作为全局对象)。

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);