JS Найти процент элементов в массиве - PullRequest
0 голосов
/ 07 февраля 2020

Итак, у меня есть этот массив:

const colors = ['blue', 'blue', 'red', 'red', 'red', 'green', 'green', 'white']

Я хочу вывести процент аналогичных элементов, используя JavaScript.

Например, синий и зеленый должны составлять 25% каждый, красный 37,5% и белый 12,5% от общего количества 8 (100%) элементов в массиве.

Как мне этого добиться?

Ответы [ 4 ]

3 голосов
/ 07 февраля 2020

Сначала вам нужно найти каждый уникальный цвет, а затем перебрать их, чтобы узнать, сколько их. Если у вас есть это, вы можете рассчитать процент как (num * 100 / total).

Взгляните на это:

const colors = ['blue', 'blue', 'red', 'red', 'red', 'green', 'green', 'white']

const totalItems = colors.length
const uniqueItems = [...new Set(colors)]
uniqueItems.forEach(currColor => {
  const numItems = colors.filter(color => color === currColor) 
  console.log(`color ${currColor} represents ${numItems.length * 100 / totalItems}%`)
})
/*
color blue represents 25%
color red represents 37.5%
color green represents 25%
color white represents 12.5%
*/
1 голос
/ 07 февраля 2020

Другие ответы до сих пор делают это в несколько шагов. Но довольно просто сделать один проход для данных, используя reduce, отметив, что каждый экземпляр добавляет долю 1 / array.length и, следовательно, процент 100 / array.length. Вот одна из техник:

const percentages = (xs) =>
  xs .reduce ((pcts, x) => ({...pcts, [x]: (pcts [x] || 0) + 100 / (xs .length)}), {})

const colors = ['blue', 'blue', 'red', 'red', 'red', 'green', 'green', 'white']

console .log (percentages (colors))
1 голос
/ 07 февраля 2020

Вы можете взять объект в виде карты sh и подсчитать количество случаев. Затем получите записи карты ha sh и верните массив цветов и процентное значение.

const
    colors = ['blue', 'blue', 'red', 'red', 'red', 'green', 'green', 'white'],
    percents = Object
        .entries(colors.reduce((map, color) => (map[color] = (map[color] || 0) + 1, map), {}))
        .map(([color, count]) => [color, count * 100 / colors.length]);

console.log(percents);
.as-console-wrapper { max-height: 100% !important; top: 0; }
1 голос
/ 07 февраля 2020

Это может помочь:

const colors = ['blue', 'blue', 'red', 'red', 'red', 'green', 'green', 'white']

var data ={}

colors.map(el=>{
  if(!data[el]){
    return data[el]=colors.filter(ob=>ob===el).length*100/colors.length
     }
  })
console.log(data)
...