我有一个这样的对象数组。我想摆脱重复的键(名称),并且在一个数组中只有一个名称及其所有相关值。
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#reduce
与 Object.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/