Javascript 高效地使用映射、减少或筛选从给定的对象数组中查找信息

Javascript 高效地使用映射、减少或筛选从给定的对象数组中查找信息,javascript,functional-programming,list-comprehension,Javascript,Functional Programming,List Comprehension,ordersList=[ [{ id:1, 名称:“鸡肉汉堡”, 售价:20, 购买价格:15, 数量:5 }, { id:2, 名称:“牛肉汉堡”, 售价:22, 购买价格:16, 数量:3 }, { id:3, 名称:“鸡肉三明治”, 售价:15, 购买价格:13, 数量:2 } ], [{ id:1, 名称:“牛肉汉堡”, 售价:22, 购买价格:16, 数量:2 }, { id:2, 名称:“鸡肉三明治”, 售价:15, 购买价格:13, 数量:2 } ], [{ id:1, 名称:“鸡

ordersList=[
[{
id:1,
名称:“鸡肉汉堡”,
售价:20,
购买价格:15,
数量:5
}, {
id:2,
名称:“牛肉汉堡”,
售价:22,
购买价格:16,
数量:3
}, {
id:3,
名称:“鸡肉三明治”,
售价:15,
购买价格:13,
数量:2
}
],
[{
id:1,
名称:“牛肉汉堡”,
售价:22,
购买价格:16,
数量:2
}, {
id:2,
名称:“鸡肉三明治”,
售价:15,
购买价格:13,
数量:2
}
],
[{
id:1,
名称:“鸡肉三明治”,
售价:15,
购买价格:13,
数量:20
}, {
id:1,
名称:“牛肉汉堡”,
售价:15,
购买价格:13,
数量:10
}
]

]
您在这里遇到了一个真正的问题。我将使用ES6解决它,因为它有两个工具,使这类事情更容易。如果需要ES5,请将其复制/粘贴到应用程序中,或向应用程序添加构建步骤

const getData = ordersList => {
  let merge = ({totalQty=0, buySumPrice=0, sellSumPrice=0}={}, {qty, buyPrice, sellPrice}) => ({
    totalQty: totalQty + qty,
    buySumPrice: buySumPrice + (qty * buyPrice),
    sellSumPrice: sellSumPrice + (qty * sellPrice)
  });
  return ordersList.reduce((ys, xs) => {
    xs.forEach(x => Object.assign(ys, {[x.name]: merge(ys[x.name], x)}));
    return ys;
  }, {});
};

let answer = getData(ordersList);

console.log(JSON.stringify(answer, null, "\t"));
输出

{
    "chicken Burger": {
        "totalQty": 5,
        "buySumPrice": 75,
        "sellSumPrice": 100
    },
    "Beef Burger": {
        "totalQty": 15,
        "buySumPrice": 210,
        "sellSumPrice": 260
    },
    "Chicken Sandwich": {
        "totalQty": 24,
        "buySumPrice": 312,
        "sellSumPrice": 360
    }
}

备注:


这个问题最难看的部分是数组是嵌套的。如果您能够将
数组(Array(Object{}))
结构展平到
数组(Object{})
,这将是一个更好的问题。但是,这需要在列表中迭代两次。对于相当大的输入,计算开销可能会破坏交易。

您尝试了什么?添加一些代码。这不是JSON,而是一个数组。JSON是一种字符串格式。这个问题看起来像是直接从学校作业中复制的。请展示你试图解决这个问题的方法。如果你自己都懒得做最低限度的事情,我们为什么还要费心帮助你呢?这个问题的另一个目的是看你在课堂上是否一直在集中注意力。这个问题是用一个可能的解决方案编辑的。我想知道是否有可能为这个问题找到一个更整洁的解决办法。