javascript - 获取对象数组中重复键的值

标签 javascript arrays algorithm loops sorting

我有一个这样的对象数组。我想摆脱重复的键(名称),并且在一个数组中只有一个名称及其所有相关值。

let array = [ 
  { name: "dimensions", value: "dimensions value 1" },
  { name: "weight",     value: "weight value 1" },
  { name: "dimensions", value: "dimensions value 2" },
  { name: "weight",     value: "weight value 3" },
  { name: "dimensions", value: "dimensions value 3" },
  { name: "weight",     value: "weight value 3" } 
]

我想把它变成这样的东西:

result = [ {
  name : "dimensions", 
  values : ["dimention value 1", "dimention value 2", "dimention value 3"] 
    }, {
  name : "weights", 
  values : ["weight value 1", "weight value 2", "weight value 3"] 
} ]

注意:数组中对象的数量是可变的。 “重量”、“尺寸”、“颜色”、“品牌”等...

到目前为止我尝试了什么:

let flags = [], output = [], l = array.length;

for (let i = 0; i < l; i++) {
    if (flags[array[i].name])
      continue;

    flags[array[i].name] = array[i].name;

    output.push({
        name : array[i].name,
        values : [array[i].value]
    });
}

它返回这样的东西:

[
  { name: "dimensions", values: [ "dimensions value 1"] },
  { name: "weight",     values: [ "weight value 1"] }
]
let array = [
  { name: "dimensions", value: "dimensions value 1" },
  { name: "weight",     value: "weight value 1"},
  { name: "dimensions", value: "dimensions value 2"},
  { name: "weight",     value: "weight value 3"},
  { name: "dimensions", value: "dimensions value 3"},
  { name: "weight",     value: "weight value 3" }
]

let flags = [], output = [], l = array.length;

for (let i = 0; i < l; i++) {
  if (flags[array[i].name])
    continue;

  flags[array[i].name] = array[i].name;

  output.push({
    name: array[i].name,
    values: [array[i].value]
  });
}

console.log(output);

最佳答案

您可以将 array#reduceObject.values() 结合使用,以根据 name 对数组进行分组。

let array = [ {name: "dimensions", value: "dimensions value 1"}, {name: "weight", value: "weight value 1"}, {name: "dimensions", value: "dimensions value 2"}, {name: "weight", value: "weight value 3"}, {name: "dimensions", value: "dimensions value 3"},{name: "weight", value: "weight value 3"} ],
  result = Object.values(array.reduce((r,{name, value}) => {
    r[name] = r[name] || {name, values : []};
    r[name].values.push(value);
    return r;
  },{}));
console.log(result);

关于javascript - 获取对象数组中重复键的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49982043/

相关文章:

java - 计算 n 个元素上所有可能根的高度为 h 的二叉搜索树的数量

javascript - 如何在 Jquery DatePicker 的 OnSelect 事件中获取 keyCode?

Python 解析 JSON 数组

javascript - Angular 6 - 是否可以在同一页面上使用两个 Angular 元素组件?

javascript - 如何获取所有包含连字符/破折号(?)的类应用于任何 DOM 元素并将它们保存到 JavaScript 数组中?

c++ - 将 .txt 文件读入数组

algorithm - 如何找到通过 DAG 中一组给定节点的所有路径?

python - python 的 NetworkX 中的最低共同祖先

javascript - Restful API typescript 和 promise

javascript - jQuery masonry 布局完成事件不起作用