Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在对象数组中查找重复值并合并一些重复的键和值_Javascript_Arrays - Fatal编程技术网

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]=克隆;
//还将其放入结果数组中。
结果