Paski7
Paski7

Reputation: 321

JS - How to find unique elements inside a 2D-Array?

In the code below, I am checking how many unique elements are in a row. How can I rewrite the code to check how many unique elements are in a column? For example, in the first column, the result would be: (i = 0) uniqueElements = 3 ( E, F, B )

let arr = [["E", "D", "E", "E", "C"],
           ["E", "A", "C", "E", "C"],
           ["F", "B", "C", "D", "G"],
           ["B", "C", "G", "G", "F"],
           ["E", "C", "E", "B", "C"]];

for (let i = 0; i < arr.length; i++) {
  
  // Check unique Elements in Rows
  let uniqueElements = arr[i].filter((elem, index) => arr[i].indexOf(elem) === index).length;

  // (i = 0) uniqueElements = 3 ( E, D, C ) 
  // (i = 1) uniqueElements = 3 ( E, A, C )
  // (i = 2) uniqueElements = 5 ( F, B, C, D, G )
  // (i = 3) uniqueElements = 4 ( B, C, G, F )
  // (i = 4) uniqueElements = 3 ( E, C, B )
}

Upvotes: 0

Views: 75

Answers (2)

sonEtLumiere
sonEtLumiere

Reputation: 4562

You can use a Set to get unique elements of rows in matrix:

let arr = [["E", "D", "E", "E", "C"],
           ["E", "A", "C", "E", "C"],
           ["F", "B", "C", "D", "G"],
           ["B", "C", "G", "G", "F"],
           ["E", "C", "E", "B", "C"]];

for (let i = 0; i < arr.length; i++) {
  const mySet = new Set(arr[i])
  console.log(`uniqueElements: ${mySet.size}`)
  console.log(mySet.values())
}

If you want to get a Set of columns in matrix:

let arr = [["E", "D", "E", "E", "C"],
           ["E", "A", "C", "E", "C"],
           ["F", "B", "C", "D", "G"],
           ["B", "C", "G", "G", "F"],
           ["E", "C", "E", "B", "C"]];

let columnSets = [];

for (let i = 0; i < arr[0].length; i++) {
  let column = arr.map(row => row[i]);
  let columnSet = new Set(column);
  columnSets.push(columnSet);
}

console.log(columnSets);

Upvotes: 1

Min
Min

Reputation: 86

The code has been saved as much as possible.

let arr = [["E", "D", "E", "E", "C"],
           ["E", "A", "C", "E", "C"],
           ["F", "B", "C", "D", "G"],
           ["B", "C", "G", "G", "F"],
           ["E", "C", "E", "B", "C"]];

for (let i = 0; i < arr.length; i++) {
  
  // Check unique Elements in Rows
  let uniqueElements = arr[i].filter((elem, index) => arr[i].indexOf(elem) === index);
  console.log(`(i = ${i}) uniqueElements = ${uniqueElements.length} (${uniqueElements})`);

  // (i = 0) uniqueElements = 3 ( E, D, C ) 
  // (i = 1) uniqueElements = 3 ( E, A, C )
  // (i = 2) uniqueElements = 5 ( F, B, C, D, G )
  // (i = 3) uniqueElements = 4 ( B, C, G, F )
  // (i = 4) uniqueElements = 3 ( E, C, B )
}

Upvotes: 0

Related Questions