簡體   English   中英

如何在javascript數組中找到相等元素的數量

[英]How to find the number of equal elements in javascript array

我是JavaScript的新手,所以請幫助我解決這個問題:我有數組,我想獲得相同值的數量。 我的陣列是:

 var arr = ["red", "blue", "green", "red", "red", "gray"];

我想輸出3因為我有3個元素紅色。

這是我到目前為止所做的:

var numberOfSameElements = 0;
var arr = ["red", "blue", "green", "red", "red", "gray"];
for(var i = 1 ; i <arr.length;i++){
if(arr[i] === arr[i-1]){
   numberOfSameElements++;  
 }
}

  console.log(numberOfSameElements);

我一直得到1.請告訴我我做錯了什么。 非常感謝!

您可以將數組縮減為哈希映射,以確定每個單詞的數量:

var words = ["red", "blue", "green", "red", "red", "gray"];
var wordCounts = words.reduce(function(counts, word) {
  counts[word] = (counts[word] || 0)++;
}, { });

console.log(wordCounts);

// >> {
//      red: 3,
//      blue: 1,
//      green: 1,
//      gray: 1
//    }

如果您想要重復的任何單詞的名稱,您可以過濾原始數組:

var repeatedWords = words.filter(function(word) {
  return wordCounts[word] > 1;
});

console.log(repeatedWords);

// >> ['red']

在這里,您使用了一個循環並使用之前的值檢查了當前值。 但實際上你需要兩個循環。

第一個將選擇一個值。 第二個將匹配所選擇的值與所有其他值。 我使用了一個found標志來檢查是否已經找到重復的值。 試試這個,

var numberOfSameElements = 0;
var found = false;
var arr = ["red", "blue", "green", "red", "red", "gray"];
for(var i = 0 ; i <arr.length;i++){
    for(var j = 0; j < arr.length; j++){
        if(arr[i] === arr[j] && i != j){
            if(!found){
                numberOfSameElements++;
                found = true;
            }
        }
    }
    found = false;
}

console.log(numberOfSameElements);

的jsfiddle

如果要在數組中找到最大重復項數,首先必須統計它們。 然后找到最大重復次數( 小提琴 ):

function getLargestNumberOfSame(arr) {
    var counterMap = arr.reduce(function (sameMap, item) { // create a map of same values
        if (!sameMap[item]) {
            sameMap[item] = 1;
        } else {
            sameMap[item]++;
        }

        return sameMap;
    }, {});

    var maxValues = Object.keys(counterMap).map(function(key) {  // turn the map into array of max values
        return counterMap[key];
    });

    return Math.max.apply(window, maxValues); // return the maximum value
}
 var numberOfSameElements = 1;
var arr = ["red", "blue", "green", "red", "red", "gray"];
arr = arr.sort();
var last;
for(var i = 0 ; i <arr.length -1 ;i++) {
    //console.log(arr[i],arr[i+1]);
if(arr[i] == arr[i+1]){
   numberOfSameElements++;
   last = arr[i];

 } else { 
    console.log(arr[i],"repert",numberOfSameElements,"times");
    numberOfSameElements=1;
   }

}
console.log(last,"repert",numberOfSameElements,"times");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM