如何检查数组每个单词重复多少次并将其推送到另一个数组[重复]

问题描述 投票:0回答:5

这个问题在这里已有答案:

让我说我有一个像这样的数组:

let votesArr = [yes,no,yes,no,yes];

我想计算每个单词重复多少次并推送到另一个单词,所以输出看起来像这样:

let votesData = [3,2]; // 3 for three yeses and 2 for two nos.

我想要处理这样的许多类型的数组,让我们说一个有3或4个唯一字的数组。我已经尝试了很多时间而且不能这样做。

javascript arrays ecmascript-6
5个回答
0
投票

你可以使用Map的力量。

var array = ['yes', 'no', 'yes', 'no', 'yes'],
    map = new Map,
    result;

array.forEach(v => map.set(v, (map.get(v) || 0) + 1));
result = [...map.values()];

console.log(result);

0
投票

只是返回一个简单的计数数组我猜是没有意义的。它应该更像下面。如果您不想要此输出,则只需映射值以形成数组。

{
  "yes": 3,
  "no": 2
}

let votesArr = ["yes","no","yes","no","yes"];

const mappedArr = votesArr.reduce((a, b) => { 
  a[b] = a[b] || 0;
  a[b] += 1;
  return a;
}, {});

console.log(mappedArr);

0
投票

你可以这样做:

let votesArr = ["yes","no","yes","no","yes"];

let countSummary = votesArr.reduce( (count, val) => {
    if(!count[val]) { count[val] = 0 }
        count[val]++;
    return count;
}, {})
console.log(countSummary)// {yes: 3, no: 2}
let countSummmaryArr = Object.keys(countSummary).map(k=>countSummary[k]);

console.log(countSummmaryArr )// [3,2]

这种方法的工作方式是.reduce将每个实例计算为值的映射,并且.map将其转换为值的数组。


0
投票

下面做你需要的,虽然我确定它可以清理一下。

var data = ["Unsure", "Yes", "Yes", "No", "Yes", "No", "Maybe", "Unsure"];
var counts = {};
for (var i = 0; i < data.length; i++) {

    (counts[data[i]]) ? counts[data[i]]++ : counts[data[i]] = 1; 

}

// counts = {Unsure: 2, Yes: 3, No: 2, Maybe: 1}

0
投票

你可以这样做

let votesArr = ['yes', 'no', 'yes', 'no', 'yes'];
// Create an empty object to store array item as key & its 
// number of repeat as value
var itemObj = {};
// loop over it and store the value in the object
var m = votesArr.forEach(function(item) {
  if (!itemObj[item]) {
    itemObj[item] = 1
  } else {
    itemObj[item] = itemObj[item] + 1
  }
});
// Use object.values to retrive the value
console.log(Object.values(itemObj))
© www.soinside.com 2019 - 2024. All rights reserved.