Find duplicate values in objects with Javascript

前端 未结 5 730
[愿得一人]
[愿得一人] 2021-01-12 01:47

I\'ve been trying to work out a problem I\'m having. I have an array with objects in it, like this:

var array = [
  {
    name: \"Steven Smith\",
    Country         


        
5条回答
  •  时光说笑
    2021-01-12 02:28

    I'm a little late to the party but this might help someone who's facing the same problem, as it is, I believe, an easier to understand solution:

    let duplicates = [];
    array.forEach((el, i) => {
      array.forEach((element, index) => {
        if (i === index) return null;
        if (element.name === el.name && element.Age === el.Age) {
          if (!duplicates.includes(el)) duplicates.push(el);
        }
      });
    });
    console.log("duplicates", duplicates);
    

    Two things might be tricky to understand:

    • with forEach you can provide a second argument that will be an index. This is to make sure we don't compare the same two array entries with each other (if (i === index) return null; -> to abort the forEach)
    • !duplicates.includes ("if not duplicates includes) checks before adding an element to the duplicates array if it's already there. Since {} === {} is false in JS, this will not be a problem with "equal" objects already in the duplicates array, but will simply avoid adding the same element twice in one forEach loop

    Edit: An even nicer solution would be this:

    const duplicates = array
        .map((el, i) => {
            return array.find((element, index) => {
                if (i !== index && element.name === el.name && element.Age === el.Age) {
                    return el
                }
            })
        })
        .filter(x => x)
    console.log("dupliactes:", duplicates)
    

    It has no side effects and all logic is in one if statement. The filter is needed to sort out undefined instances.

提交回复
热议问题