Also habe ich dieses Array:

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

Ich möchte den Prozentsatz der ähnlichen Elemente mit JavaScript ausgeben.

B. Blau und Grün sollten jeweils 25%, Rot 37,5% und Weiß 12,5% von insgesamt 8 (100%) Elementen im Array betragen.

Wie erreiche ich das?

1
Parsa 7 Feb. 2020 im 18:09

4 Antworten

Beste Antwort

Sie müssen zuerst jede einzelne Farbe finden und dann über sie iterieren, um herauszufinden, wie viele es gibt. Sobald Sie dies haben, können Sie den Prozentsatz als (num * 100 / total) berechnen.

Schau dir das an:

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%
*/
3
Rob Brander 7 Feb. 2020 im 15:16

Sie können ein Objekt als Hash-Map verwenden und die Vorkommen zählen. Holen Sie sich dann die Einträge der Hash-Map und geben Sie ein Array mit Farben und Prozentwerten zurück.

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
Nina Scholz 7 Feb. 2020 im 16:40

Die anderen Antworten tun dies bisher in mehreren Schritten. Es ist jedoch ziemlich einfach, einen einzelnen Durchlauf der Daten mit reduce durchzuführen, indem festgestellt wird, dass jede Instanz einen Bruchteil von 1 / array.length und damit einen Prozentsatz von 100 / array.length hinzufügt. Hier ist eine Technik:

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
Scott Sauyet 7 Feb. 2020 im 17:02

Dies kann helfen:

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)
1
Merci Dieu KIMPOLO 7 Feb. 2020 im 15:22