gpt4 book ai didi

javascript - 在要计算的对象经常变化的模型中计算属性

转载 作者:行者123 更新时间:2023-11-30 09:20:17 25 4
gpt4 key购买 nike

对于给定的场景,我需要计算给定字段中项目的数量。下面应该反射(reflect)的比较好。

resource = {
name1 : [1,2,3,4],
name2 : [a,b,c]
}

但有时它看起来像

resource = [1, 2, c, 8]

我正在努力掌握的是如何在一个函数中获取每个场合的项目总数。我对如何为其中任何一个做这件事很舒服,但我需要尝试制作一个函数来接受两者并返回我正在寻找的结果。

对于这个例子,第一个场景是 7 个 items,第二个场景将返回 4 个 items

最佳答案

@OriDrori提供的解决方案适用于给定的示例。如果你增加一层深度,它就会停止工作。

const resource1 = {
name1 : [1,2,3,4],
name2 : ['a','b','c']
}

const resource2 = [1, 2, 'c', 8];

const resource3 = {
subResource: {
name1 : [1,2,3,4]
},
name2 : ['a','b','c']
};

const countItems = (obj) => [].concat(...Object.values(obj)).length;

console.log(countItems(resource1)); // 7

console.log(countItems(resource2)); // 4

console.log(countItems(resource3)); // 4 Instead of 7

相反,您应该制作一个递归函数(一个调用自身的函数)来处理任何深度级别。

const resource1 = {
name1 : [1,2,3,4],
name2 : ['a','b','c']
}

const resource2 = [1, 2, 'c', 8];

const resource3 = {
subResource: {
name1 : [1,2,3,4]
},
name2 : ['a','b','c']
};

const resource4 = {
subResource: {
subsubResource: {
name1 : [1,2,3,4]
}
},
name1 : [1,2,3,4],
name2 : ['a','b','c']
};

const countItems = (obj) => {
let total = 0;
if (Array.isArray(obj)) { total += obj.length; }
else {
for (const key in obj) {
total += countItems(obj[key]);
}
}

return total;
};

console.log(countItems(resource1)); // 7
console.log(countItems(resource2)); // 4
console.log(countItems(resource3)); // 7
console.log(countItems(resource4)); // 11

关于javascript - 在要计算的对象经常变化的模型中计算属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52221320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com