1

I am kinda new to Javascript and I cant figure out how to do this.

So , I have this ( from csv file ) array1

 [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {Number: 1}
1: {Number: 2}
2: {Number: 3}
3: {Number: 64}
4: {Number: 65}
5: {Number: 66}
6: {Number: 67}

array 2 ( also from other csv )

 [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {Number: 1}
1: {Number: 2}
2: {Number: 3}
3: {Number: 11}
4: {Number: 12}
5: {Number: 13}
6: {Number: 14}

Now I want to find the duplicates and generate a csv like :

 [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {Number: 1, Result: "Not Ok"}
1: {Number: 2, Result: "Not Ok"}
2: {Number: 3, Result: "Not Ok"}
3: {Number: 11, Result: "Ok"} 

the code I got it adds the " Not ok" and I am stuck in the last part .

for (var i = 0; i < array1.data.length; i++) {
          for (var j = 0; j < array2.data.length; j++) {
                 if (array1.data[i].Number=== array2.data[j].Number) {
                    array2.data[j].result= [],
                    array2.data[j].result.push("Not OK")
                 }
          }
}

Need some help here!

Jaxie
  • 35
  • 4
  • Does this answer your question? [How to compare arrays in JavaScript?](https://stackoverflow.com/questions/7837456/how-to-compare-arrays-in-javascript) – Diego Fortes Mar 12 '20 at 20:41
  • Do you only have to add "Not ok" or "Ok" as well? I don't see where you add "Ok"? Also, I believe if look closely on stack overflow you can find solution. You can use this,but instead of removing duplicate add "Not ok" there https://stackoverflow.com/questions/14930516/compare-two-javascript-arrays-and-remove-duplicates – Denys Fiialko Mar 12 '20 at 20:48

2 Answers2

3

You could take a Set for all values of the first array and then map the second by checking the value.

var array1 = [{ Number: 1 }, { Number: 2 }, { Number: 3 }, { Number: 64 }, { Number: 65 }, { Number: 66 }, {  Number: 67 }],
    array2 = [{ Number: 1 }, { Number: 2 }, { Number: 3 }, { Number: 11 }, { Number: 12 }, { Number: 13 }, {  Number: 14 }],
    set1 = new Set(array1.map(o => o.Number)),
    result = array2.map(o => ({ ...o, Result: set1.has(o.Number) ? 'Not Ok' : 'Ok' }));

console.log(result);
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392
1

Here's one way you could go about this:

const arr1 = [
  { Number: 1 }, { Number: 2 }, { Number: 3 }, { Number: 64 },
  { Number: 65 }, { Number: 66 }, { Number: 67 }
];
const arr2 = [
  { Number: 1 }, { Number: 2 }, { Number: 3 }, { Number: 11 }, 
  { Number: 12 }, { Number: 13 }, { Number: 14 }
];

const dictionary = [...arr1, ...arr2].reduce((accumulator, item) => {
  const key = item.Number;
  const record = accumulator[key] || { key, count: 0 };

  return {
    ...accumulator,
    [key]: {
      ...record,
      count: record.count + 1
    }
  };
}, {});

const result = Object.keys(dictionary).map(key => {
  const item = dictionary[key];
  
  return {
    Number: item.key,
    Result: item.count > 1 ? "Not Ok" : "Ok"
  };
});

console.log(result)
goto
  • 4,336
  • 15
  • 20