【问题标题】:Convert the JavaScript Object to similar items将 JavaScript 对象转换为类似项目
【发布时间】:2020-05-12 04:28:56
【问题描述】:

我有一个 JavaScript 对象数组,看起来像这样,

var object = [{"Fruit" : "Banana", "NAPrice" : 45},
     {"Fruit" : "Banana", "EUPrice" : 50},
     {"Fruit" : "Banana", "AUPrice" : 30},
     {"Fruit" : "Apple" , "NAPrice" : 25},
     {"Fruit" : "Apple" , "EUPrice" : 20},
     {"Fruit" : "Apple" , "AUPrice" : 23},
     {"Fruit" : "Berry", "NAPrice" : 18},
     {"Fruit" : "Berry", "EUPrice" : 8},
     {"Fruit" : "Berry", "AUPrice" : 17}];

正如您所见,每个物体都有相似的果实,但特征不同,我们可以将它们完全结合起来吗?为了看起来像这样,

var object = [{"Fruit" : "Banana", "NAPrice" : 45, "EUPrice" : 50, "AUPrice" : 30},
     {"Fruit" : "Apple", "NAPrice" : 25, "EUPrice" : 20, "AUPrice": 23}
     {"Fruit" : "Berry", "NAPrice" : 18, "EUPrice" : 8, "AUPrice": 18}];

PS:注意水果的价格会有统一的数字,这里每种水果3个价格。

【问题讨论】:

  • 对象在预期的输出中有重复的键。
  • @adiga,修改了问题。谢谢指出
  • @SharathKamlekar 添加的答案能解决您的问题吗?

标签: javascript dictionary object typescript


【解决方案1】:

您可以使用Array.reduceObject.values() 来实现此目的。我首先创建了一个将键作为水果值的对象,并不断为它分配对象。后来我把Object的所有值都取出来了。

var object = [{"Fruit" : "Banana", "NAPrice" : 45},
     {"Fruit" : "Banana", "EUPrice" : 50},
     {"Fruit" : "Banana", "AUPrice" : 30},
     {"Fruit" : "Apple" , "NAPrice" : 25},
     {"Fruit" : "Apple" , "EUPrice" : 20},
     {"Fruit" : "Apple" , "AUPrice" : 23},
     {"Fruit" : "Berry", "NAPrice" : 18},
     {"Fruit" : "Berry", "EUPrice" : 8},
     {"Fruit" : "Berry", "AUPrice" : 17}];
     
     
var newObj = object.reduce((acc, ob) => {
  if (acc[ob.Fruit]) {
    Object.assign(acc[ob.Fruit], {...ob});
  } else {
    acc[ob.Fruit] = {...ob};
  }
  return acc
}, {});

var merges = Object.values(newObj)

console.log(merges)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2019-04-14
    • 2012-12-29
    • 2017-06-08
    • 1970-01-01
    • 2019-02-19
    • 2019-02-04
    相关资源
    最近更新 更多