获取对象中嵌套数组的长度总和

Get sum of length of nested array in an object

我有一个这样的对象

const obj = {
  name: "abc",
  arr: [{
    key1: "value1",
    arr1: [1, 2, 3]
  }, {
    key1: "value2",
    arr1: [4, 5, 6]
  }]
}

在这里,我想添加数组arr1 和arr2 的长度,以及return 6 作为答案。我知道通过 for-in 循环和计算长度是一种解决方案,但什么是更快、更精确的解决方案?

您似乎想要计算仅具有原始值作为成员的数组的长度,而不是具有(某些)objects/arrays 作为成员的数组的长度。

这是一个递归解决方案:

const isPrimitive = val => Object(val) !== val;
const isArrayOfPrimitive = arr => arr?.every?.(isPrimitive);

const deepLength = obj => isPrimitive(obj) ? 0
         : Object.values(obj).reduce((sum, val) => sum + deepLength(val), 
                                     isArrayOfPrimitive(obj) ? obj.length : 0);

// Example run:
const obj = {
  name: "abc",
  arr: [{
    key1: "value1",
    arr1: [1, 2, 3]
  }, {
    key2: "value2",
    arr2: [4, 5, 6]
  }]
};

console.log(deepLength(obj)); // 6

const obj = {
    name: "abc",
    arr: [
        { key1: "value1", arr1: [1, 2, 3, 4, 6, 7, 9] },
        { key2: "value2", arr2: [4, 5, 6] }
    ]
}



function getNumbers(arr) {
    let a = arr['arr'][0].arr1.length;
    let b = arr['arr'][1].arr2.length;

    let sum = a + b;
    return sum;
}

console.log(getNumbers(obj));

这是我能想到的使用 reduce

最简单的实现

const obj = {
  name: "abc",
  arr: [{
    key1: "value1",
    arr1: [1, 2, 3]
  }, {
    key1: "value2",
    arr1: [4, 5, 6]
  }]
}

const result = obj.arr.reduce((res, {arr1}) => res + arr1.length, 0)

console.log(result)