Javascript:对象的总长度

Javascript : total length of an object

本文关键字:对象 Javascript      更新时间:2023-09-26

我有一个像这样的对象:

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

我需要得到元素的总数。在这个例子中,我应该得到5。

使用for循环遍历对象,在增加长度计数器之前检查键是否为Array:

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

您可以使用reduce为所有!

var totalLength = Object.keys(MyObject).reduce(function(total, key) {
    return total += MyObject[key].length;
}, 0);

您需要遍历map的所有键,并对每个数组的长度求和。

功能方式:

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)

使用for in循环遍历所有对象,并通过查找数组的长度来添加计数。

当使用for in时,建议使用hasOwnProperty(),以避免由于原型继承而迭代不必要的属性。

var count = 0;
for (var key in MyObject) {
    if (MyObject.hasOwnProperty(key)) {
        count += MyObject[key].length;
    }
}
console.log(count);

您可以考虑以下代码:

  • 使用Object.keys()来"循环"对象属性
  • 使用每个arraylength属性来知道数组中有多少项。
  • 相应增加变量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);

我知道我迟到了,但为了完整,这里是我使用ES2019引入的方法<Array>.flat()的方法。首先,你可以用Object.values()获得所有数组,然后用flat()将所有数组合并在一起,以获得总长度。

由于flat() -方法在每次默认情况下只平坦化一个,因此可以将2作为参数(depth)传递。

就代码长度而言,这是迄今为止我见过的最有效的解决问题的方法。

const myobject = {
  Object1: ["12345", "67890"],
  Object2: ["74185"],
  Object3: ["29630", "789654"],
};
console.log(Object.values(myobject).flat(2).length);

如果myobject有嵌套数组,你也可以使用Infinity。只是为了确保;)

const myobject = {
  Object1: [
    "1",
    "2",
    [
      ["3", "4"],
      ["5", "6"],
    ],
  ],
  Object2: ["7"],
  Object3: ["8", "9"],
};
console.log(Object.values(myobject).flat(Infinity).length);