给定以下对象:
let data = {
2018: {
11: {
29: [1, 2, 3],
30: [4, 5],
},
12: {
30: [6, 7],
31: [8, 9],
},
},
2019: {
12: {
29: [10, 11],
30: [12, 13],
31: [14, 15],
}
},
}
将该对象的所有元素写入某个数组,如下所示:
[1、2、3、4、5、6、7、8、9、10、11、12、13、14、15]
我雕刻了以下内容:
let res = [];
for (const elem in data) { // создаю элемент
sum = (elem) =>
elem instanceof Object // проверка является ли элемент объектом
? Object.values(elem).reduce((acc, n) =>res.concat(acc + sum(n)), 0) // здесь я использую свой опыт по сложению значений массивов, находящихся внутри объектов и чуточку фантазии)
: res.push(elem);
}
console.log(sum(data));
一切都会好的,但是控制台中的结果是这样的: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, '1,2 ,3,4,5,6,7,8,9,01,2,3,4,5,6,7,8,9,1,2,3,4,5,01,…12,13, 14,15, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,1415']。现在我不明白他为什么要加上这句话)
如果我这样写函数:
sum = (elem) =>
elem instanceof Object
? Object.values(elem).reduce((acc, n) =>res.concat(sum(n)), 0)
: res.push(elem);
,然后它打印数字四次。现在继续啃国外的stack、mdn和一本js教材。如果我想到一个好主意,我会纠正它)
我建议使用递归来解决这个问题......
我通过更正我的代码解决了这个问题。虽然是歪的,但我决定了)