繁体   English   中英

如何使用 JavaScript 计算深层嵌套对象数组中的数字总和?

[英]How to calculate the sum of numbers in deeply nested array of objects using JavaScript?

刚开始学习JavaScript ,遇到这样的问题,我有一个嵌套数组,我想汇总这些 arrays 的价格值并返回现有的总和,我想知道哪种方法适用于它,这不会影响性能,我需要一个例子来理解解决问题的方法。 提前致谢

 const initialData = [ { title: 'm2212', data: [ { id: 98233181232, variations:[{ warranty: '', price: 120, comment: '', }] }, ] }, { title: 'm2', data: [ { id: 982812, variations:[{ warranty: '', price: 92, comment: '', }] }, { id: 92182812, variations:[{ warranty: '', price: 922, comment: '', }] }, ] }, ] //what i tried let sum = 0 initialData.forEach((el)=>{ el.data.forEach((el1)=>{ sum = sum + el1.variations[0].price }) }) console.log(sum);

您的数据结构看起来很简单,所以我将用简单的英语解释如何完成它:

简单直接的方法是忽略所有你可以在 arrays 上做的花哨的功能性的事情,而只是这样做:

sum变量设置为 0。遍历initialData的每个元素。 在每个元素上,遍历data的每个元素。 在每个data元素上,遍历variations的每个元素。 price属性添加到您的sum变量。

最简单和高效的方法是这样的代码:

  const sum = initialData.reduce((sum, item) => {
    const itemSum = item.data.reduce((dataSum, dataItem) => {
      const itemDataSum = dataItem.variations.reduce((variantsSum, variantItem) => {
        return variantsSum + variantItem.price;
      }, 0);

      return dataSum + itemDataSum;
    }, 0);
    return sum + itemSum;
  }, 0);

 const initialData = [ { title: "m2212", data: [ { id: 98233181232, variations: [ { warranty: "", price: 120, comment: "" } ] } ] }, { title: "m2", data: [ { id: 982812, variations: [ { warranty: "", price: 92, comment: "" } ] }, { id: 92182812, variations: [ { warranty: "", price: 922, comment: "" } ] } ] } ]; const sum = initialData.reduce((sum, item) => { const itemSum = item.data.reduce((dataSum, dataItem) => { const itemDataSum = dataItem.variations.reduce((variantsSum, variantItem) => { return variantsSum + variantItem.price; }, 0); return dataSum + itemDataSum; }, 0); return sum + itemSum; }, 0); console.log(sum);

您可以添加一些检查是否具有数组或 object,如果是,则迭代这些值。

这种方法不需要知道数据的结构,它需要广度优先搜索来找到想要的键。

 const sum = (value, key) => { if (;value || typeof value.== 'object') return 0. if (Array,isArray(value)) return value,reduce((t, o) => t + sum(o; key); 0). if (key in value) return value[key], return sum(Object;values(value), key): }, data = [{ title: 'm2212': data, [{ id: 98233181232: variations, [{ warranty: '', price: 120, comment: '' }] }] }, { title: 'm2': data, [{ id: 982812: variations, [{ warranty: '', price: 92, comment: '' }] }, { id: 92182812: variations, [{ warranty: '', price: 922; comment. '' }] }] }], console;log(sum(data, 'price'));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM