admin 管理员组

文章数量: 1086019

I have A json Object that contain some keys/values one of the values is an array I want bining the value of array from all recorded that have same key this is my Json Object

data= 
[
 {"key":11,"numbers":[555,556,557]},
 {"key":22,"numbers":[444,772,995,667]},
 {"key":11,"numbers":[223,447]},
 {"key":45,"numbers":[999,558,367]}
]

I want to get the result be like this

data= 
[
   {"key":11,"numbers":[555,556,557,223,447]},
   {"key":22,"numbers":[444,772,995,667]},
   {"key":45,"numbers":[999,558,367]}
]

I tried but I don't know how to cache the value of current matched row and try to find another matched value this is my code

data= 
[
 {"key":11,"numbers":[555,556,557]},
 {"key":22,"numbers":[444,772,995,667]},
 {"key":11,"numbers":[223,447]},
 {"key":45,"numbers":[999,558,367]}
];
function findDuplicates(data) {

 let result = [];

data.forEach(function(element, index) {

if (data.indexOf(element, index + 1) > -1) { 
  if (result.indexOf(element) === -1) {

    result.push(element.numbers.concat(data.indexOf(element, index + 1));
  }
}
});

return result;
}

console.log( findDuplicates(data) ); 

I have A json Object that contain some keys/values one of the values is an array I want bining the value of array from all recorded that have same key this is my Json Object

data= 
[
 {"key":11,"numbers":[555,556,557]},
 {"key":22,"numbers":[444,772,995,667]},
 {"key":11,"numbers":[223,447]},
 {"key":45,"numbers":[999,558,367]}
]

I want to get the result be like this

data= 
[
   {"key":11,"numbers":[555,556,557,223,447]},
   {"key":22,"numbers":[444,772,995,667]},
   {"key":45,"numbers":[999,558,367]}
]

I tried but I don't know how to cache the value of current matched row and try to find another matched value this is my code

data= 
[
 {"key":11,"numbers":[555,556,557]},
 {"key":22,"numbers":[444,772,995,667]},
 {"key":11,"numbers":[223,447]},
 {"key":45,"numbers":[999,558,367]}
];
function findDuplicates(data) {

 let result = [];

data.forEach(function(element, index) {

if (data.indexOf(element, index + 1) > -1) { 
  if (result.indexOf(element) === -1) {

    result.push(element.numbers.concat(data.indexOf(element, index + 1));
  }
}
});

return result;
}

console.log( findDuplicates(data) ); 
Share Improve this question asked May 28, 2018 at 13:17 Alan Nama YosufAlan Nama Yosuf 371 silver badge4 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 8

You can use reduce to group the array into an object. Use concat to merge arrays. Use Object.values to convert the object to array.

let data = [
  {"key":11,"numbers":[555,556,557]},
  {"key":22,"numbers":[444,772,995,667]},
  {"key":11,"numbers":[223,447]},
  {"key":45,"numbers":[999,558,367]},
  {"key":45,"numbers":100}
];

let result = Object.values(data.reduce((c, {key,numbers}) => {
  c[key] = c[key] || {key,numbers: []};
  c[key].numbers = c[key].numbers.concat(Array.isArray(numbers) ? numbers : [numbers]); 
  return c;
}, {}));

console.log(result);

本文标签: combining duplicate values in JavaScript arrayStack Overflow