Как посчитать вхождения строк в массив массивов?

#javascript

#javascript

Вопрос:

У меня есть следующий массив массивов (вставленный ниже), и я хотел бы перебрать его, чтобы подсчитать, сколько раз появляется каждый цвет. Какой самый простой способ сделать это?

 [
["Brown"],
["Blue", "Green"],
["Red", "Black", "White", "Other"],
["Green"],
["Green", "Gold"],
["Blue"]
];
 

Ответ №1:

Используйте flat() и reduce() :

 const data = [
  ["Brown"],
  ["Blue", "Green"],
  ["Red", "Black", "White", "Other"],
  ["Green"],
  ["Green", "Gold"],
  ["Blue"]
];

const result = data.flat().reduce((a, v) => (a[v] = (a[v] || 0)   1, a), {});

console.log(result); 

Ответ №2:

Вы можете использовать Array.reduce() .

 const input = [
["Brown"],
["Blue", "Green"],
["Red", "Black", "White", "Other"],
["Green"],
["Green", "Gold"],
["Blue"]
];

const output = input.reduce((acc, cur) => {
  cur.forEach(item => {
    if (!acc[item]) acc[item] = 0;
    acc[item]   ;
  })
  return acc;
}, {})

console.log(output); 

Ответ №3:

Используйте счетчик для подсчета и итерации по массиву

 let counter = {}
let colorAry = [
    ["Brown"],
    ["Blue", "Green"],
    ["Red", "Black", "White", "Other"],
    ["Green"],
    ["Green", "Gold"],
    ["Blue"]
];

for(let ary of colorAry) {
    for(let color of ary) {
        if(counter[color]==undefined) counter[color] = 0
        counter[color]  
    }
}
console.log(counter)
 

Ответ №4:

Зациклите каждый массив и вложенные массивы и сохраните количество в другой переменной.

 let data = [
  ["Brown"],
  ["Blue", "Green"],
  ["Red", "Black", "White", "Other"],
  ["Green"],
  ["Green", "Gold"],
  ["Blue"]
];

// to store the count
let counter = {};

// loop each and sub sub arrays
data.forEach(item => {
  item.forEach(subItem => {
    counter[subItem] = counter[subItem] ? counter[subItem]   1 : 1
  })
});

console.log(counter);