Javascript 在对象数组中查找重复值并合并一些重复的键和值
我有两个对象数组Javascript 在对象数组中查找重复值并合并一些重复的键和值,javascript,arrays,Javascript,Arrays,我有两个对象数组 array = [ { "id_0":356, "name":"India", "key1":150 }, { "id_0":356, "name":"India", "key2":200 }, { "id_0":748, "name":"Swaziland", "key1":140 }, { "id_0":748, "name":"Swaziland", "key2":180 } ] 我试图在对象数组中找到重复
array = [
{
"id_0":356,
"name":"India",
"key1":150
},
{
"id_0":356,
"name":"India",
"key2":200
},
{
"id_0":748,
"name":"Swaziland",
"key1":140
},
{
"id_0":748,
"name":"Swaziland",
"key2":180
}
]
我试图在对象数组中找到重复的id\u 0
,并合并key2
和value的重复对象
我希望结果是:
array = [
{
"id_0":356,
"name":"India",
"key1":150,
"key2":200
},
{
"id_0":748,
"name":"Swaziland",
"key1":140,
"key2":180
}
]
如何查找重复值并在数组中合并重复的键和值?您可以根据需要减少数组
可以使用合并重复项
Object.assign是ES6的一部分。如果它不适合您,只需将其替换为:
for (var attrname in item) {
newItem[attrname] = item[attrname];
};
您可以根据需要使用减少阵列
可以使用合并重复项
Object.assign是ES6的一部分。如果它不适合您,只需将其替换为:
for (var attrname in item) {
newItem[attrname] = item[attrname];
};
试试这个
var数组=[
{
“id_0”:356,
“名称”:“印度”,
“键1”:150
},
{
“id_0”:356,
“名称”:“印度”,
“键2”:200
},
{
“id_0”:356,
“名称2”:“中国”,
“键2”:200
}
]
函数合并数组(arr)
{
var outputObj={};
用于(变量计数器=0;计数器
编辑以满足您的“更新”要求
var array = [
{
"id_0":356,
"name":"India",
"key1":150
},
{
"id_0":356,
"name":"India",
"key2":200
},
{
"id_0":400,
"name2":"china",
"key2":200
},
{
"id_0":400,
"name2":"china",
"key2":200
}
]
function mergeArray( arr )
{
var outputObj = {};
for ( var counter = 0; counter < arr.length; counter++ )
{
var obj = arr[ counter ];
for( var key in obj )
{
if ( !outputObj[ key ] )
{
outputObj[ key ] = obj[ key ];
}
}
}
return outputObj;
}
function collateArray( arr )
{
var outputObj = {};
var result = [];
for ( var counter = 0; counter < arr.length; counter++ )
{
var obj = arr[ counter ];
var id_0value = obj[ "id_0" ];
if ( !outputObj[ id_0value ] )
{
outputObj[ id_0value ] = [];
}
outputObj[ id_0value ].push( obj );
}
console.log( outputObj );
for ( var key in outputObj )
{
result.push( mergeArray( outputObj[ key ] ) );
}
return result;
}
console.log( collateArray( array ) );
var数组=[
{
“id_0”:356,
“名称”:“印度”,
“键1”:150
},
{
“id_0”:356,
“名称”:“印度”,
“键2”:200
},
{
“id_0”:400,
“名称2”:“中国”,
“键2”:200
},
{
“id_0”:400,
“名称2”:“中国”,
“键2”:200
}
]
函数合并数组(arr)
{
var outputObj={};
用于(变量计数器=0;计数器
试试这个
var数组=[
{
“id_0”:356,
“名称”:“印度”,
“键1”:150
},
{
“id_0”:356,
“名称”:“印度”,
“键2”:200
},
{
“id_0”:356,
“名称2”:“中国”,
“键2”:200
}
]
函数合并数组(arr)
{
var outputObj={};
用于(变量计数器=0;计数器
编辑以满足您的“更新”要求
var array = [
{
"id_0":356,
"name":"India",
"key1":150
},
{
"id_0":356,
"name":"India",
"key2":200
},
{
"id_0":400,
"name2":"china",
"key2":200
},
{
"id_0":400,
"name2":"china",
"key2":200
}
]
function mergeArray( arr )
{
var outputObj = {};
for ( var counter = 0; counter < arr.length; counter++ )
{
var obj = arr[ counter ];
for( var key in obj )
{
if ( !outputObj[ key ] )
{
outputObj[ key ] = obj[ key ];
}
}
}
return outputObj;
}
function collateArray( arr )
{
var outputObj = {};
var result = [];
for ( var counter = 0; counter < arr.length; counter++ )
{
var obj = arr[ counter ];
var id_0value = obj[ "id_0" ];
if ( !outputObj[ id_0value ] )
{
outputObj[ id_0value ] = [];
}
outputObj[ id_0value ].push( obj );
}
console.log( outputObj );
for ( var key in outputObj )
{
result.push( mergeArray( outputObj[ key ] ) );
}
return result;
}
console.log( collateArray( array ) );
var数组=[
{
“id_0”:356,
“名称”:“印度”,
“键1”:150
},
{
“id_0”:356,
“名称”:“印度”,
“键2”:200
},
{
“id_0”:400,
“名称2”:“中国”,
“键2”:200
},
{
“id_0”:400,
“名称2”:“中国”,
“键2”:200
}
]
函数合并数组(arr)
{
var outputObj={};
用于(变量计数器=0;计数器
使用temp对象
作为存储键=>项的映射
可以使时间复杂度达到O(n)
:
var-arr=[
{
“id_0”:356,
“名称”:“印度”,
“键1”:150
},
{
“id_0”:356,
“名称”:“印度”,
“键2”:200
},
{
“id_0”:748,
“名称”:“斯威士兰”,
“键1”:140
},
{
“id_0”:748,
“名称”:“斯威士兰”,
“键2”:180
}
];
//项:要合并为唯一的数组。
//attrName:用于区分的属性名称,
//isOverwrite:决定值是否将被后面的值覆盖。默认为false。
函数getUnique(项、属性名、isOverwrite){
//映射以按其id保留对对象的引用。
var-store={};
//输出结果的数组。
var结果=[];
isOverwrite=!!isOverwrite;
items.forEach(功能(项目){
变量id=项目[attrName];
var键;
//尝试按id从存储中提取项目。
var目标=存储[id];
//如果目标项存在于存储中,且其已被复制,则我们需要将其合并。
如果(目标的类型!==“未定义”){
//如果它被呈现,我们需要将它合并到现有的一个中。
用于(输入项){
如果(!item.hasOwnProperty(键)){
继续;
}
//如果isOverwrite为true,则始终使用最新值,否则,
//我们只应用目标中尚不存在的值。
if(isOverwrite | |目标类型[键]===‘未定义’){
目标[关键]=项目[关键];
}
}
}否则{
//若它还并没有被存储,那个么把它作为一个克隆放进结果中,并映射
//稍后参考。
var clone={};
用于(输入项){
if(项目hasOwnProperty(键)){
克隆[键]=项[键];
}
}
store[id]=克隆;
//还将其放入结果数组中。
结果