我尝试根据一系列匹配属性合并数组中的一组字符串,并删除重复的项目。
我当前的数组:
{id: "12", value: "Option 1"},
{id: "55", value: "Option A"},
{id: "55", value: "Option B"},
{id: "55", value: "Option C"},
{id: "55", value: "Option D"},
{id: "106", value: "Option 1"}
我想合并所有ID为' 55'所以我的数组看起来像这样:
{id: "12", value: "Option 1"},
{id: "55", value: "Option A, Option B, Option C, Option D"},
{id: "106", value: "Option}
我只能设法使用for循环合并前两个项目并检查-1兄弟,并且可以在没有严重膨胀的情况下解决这个问题。
任何建议都将受到赞赏。
答案 0 :(得分:2)
您可以将对象用作查找表,同时将结果并行存储在数组中:
const lookup = {}, result = [];
for( const {id, value} of input ){
if(lookup[id]){
lookup[id].value += "," + value;
}else{
result.push( lookup[id] = {id, value} );
}
}
这是一个非常新的javascript,但现代引擎上的works;)
答案 1 :(得分:1)
有点晚了。但您可以使用for/while
循环尝试此操作。这是一种非常基本的方法。如果时间复杂性不是问题。否则Jons的答案是好的。
var x = [{id: "12", value: "Option 1"},
{id: "55", value: "Option A"},
{id: "55", value: "Option B"},
{id: "55", value: "Option C"},
{id: "55", value: "Option D"},
{id: "12", value: "Option D"},
{id: "53", value: "Option D"},
{id: "106", value: "Option 1"}];
for(var j =0; j<x.length;j++){
for(var i =0; i<x.length;i++){
if(x[j].id == x[i].id && i !=j){
x[j].value = x[j].value + "," +x[i].value;
x.splice(i, 1);
}
}
}
console.log(x);
&#13;
答案 2 :(得分:0)
您可以使用array#reduce
。
const data = [{id: "12", value: "Option 1"},{id: "55", value: "Option A"},{id: "55", value: "Option B"},{id: "55", value: "Option C"},{id: "55", value: "Option D"},{id: "106", value: "Option 1"}];
var result = data.reduce((r, o) => {
return r[o.id] = r[o.id] ? (r[o.id].value += ", " + o.value, r[o.id]) : o, r;
},{})
var output = Object.values(result);
console.log(output);
.as-console-wrapper { max-height: 100% !important; top: 0; }