2015-08-16 61 views
2

我是JavaScript新手,請幫助我解決此問題: 我有數組,我想獲取相同數值的數目。我的陣列是:如何查找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,請告訴我,我做錯了。非常感謝!

+2

這裏看一看接受的答案:http://stackoverflow.com/questions/840781/easiest-way-to-find-duplicate- value-in-a-javascript-array – jeff

+0

你總是收到一個,因爲你總是比較項目與前一個... –

+0

但如何不比較項目與前一個:(....(任何提示)。謝謝 – HenryDev

回答

2

在這裏,您已經使用了一個循環,並使用它的先前值檢查了當前值。但你需要兩個循環。

第一個會選擇一個值。第二個將把挑選的價值與其他所有價值相匹配。我已使用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

+0

Ashad!非常感謝你,兄弟,你是一個拯救生命的人!!! – HenryDev

+0

我不是說這是尋找重複值的最佳方式,但它是最簡單的方法之一。 –

+0

T這裏不需要兩個循環。這是相當低效的,因爲它遍歷數組'(arrayLength - 1)^ 2'次。 – RobG

3

可以減少陣列的哈希表找出多少每個字的有:

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'] 
+0

OP對於JavaScript來說是新手,你建議'reduce'函數? LOL –

+0

是的,我會向大家建議正確的方法。爲什麼我會因爲有人在學習而提出錯誤的方式? – rrowland

+0

顯然不是錯誤的方式,而是更易於消化的東西 –

2

I如果你想獲得數組中最大數量的重複數據,你首先必須對它們進行計數。然後找到最大重複數(fiddle):

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 
} 
1
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"); 
+0

我認爲這將解決您的問題容易和易於理解。 –