打印具有相同属性的重复项

时间:2017-12-18 13:23:11

标签: javascript arrays object

如何获取项目重复属性并将其推送到对象中?

例如我有:

var object = { "1" :{"ip": 4},  "2" :{"ip": 3}, "3" :{"ip": 4}, "4" :{"ip": 3}}

我希望有一个对象或数组,我将[[1,3], [2,4]]

3 个答案:

答案 0 :(得分:2)

  

我希望有一个对象或数组,我将拥有{[1,3],[2,4]}

如果您的意思是[[1,3], [2,4]],请使用reduceObject.values

<强>演示

var object = { "1" :{"ip": 4},  "2" :{"ip": 3}, "3" :{"ip": 4}, "4" :{"ip": 3}};

var output = Object.values(Object.keys( object ).reduce( function( a, b){
   var key = object[ b ].ip; //key to be used for grouping the values
   a[ key ] = a[ key ] || [];
   a[ key ].push( Number(b) );
   return a;
} ,{}));

console.log( output.reverse() );

答案 1 :(得分:0)

您可以使用reduce()和ES6 Map并返回数组数组。

&#13;
&#13;
var object = { "1" :{"ip": 4},  "2" :{"ip": 3}, "3" :{"ip": 4}, "4" :{"ip": 3}}

var result = [...Object.keys(object).reduce((r, e) => {
  let ip = object[e].ip
  if(!r.get(ip)) r.set(ip, [e]);
  else r.get(ip).push(e);
  return r;
}, new Map).values()];

console.log(result)
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用array#reduceJSON.stringify值作为键,并添加具有相同值的键。

&#13;
&#13;
var object = { "1" :{"ip": 4},  "2" :{"ip": 3}, "3" :{"ip": 4}, "4" :{"ip": 3}};

var result = Object.keys(object).reduce((map,key) => {
  var k = JSON.stringify(object[key]);
  map[k] =  map[k] || [];
  map[k].push(key);
  return map;
},{});
var output = Object.values(result);
console.log(output);
&#13;
&#13;
&#13;