2017-10-28 82 views
0

所以我一直googling了很多,並嘗試使用不同的過濾器陣列等,無濟於事。查找和返回完全匹配(重複)在JavaScript數組

我有一個字符串數組,像這樣:

var foo = ['1X31UX11','X3U11X1','33X11U12']; 

有沒有一種方法來檢查相互每個字符串數組中,如果有一個精確匹配(即字符以相同的順序)它打印特定字符串發生多少次&也打印有問題的字符串?

+0

是的,這是可能的(實際上相當容易寫自己) - 請顯示你的嘗試,並解釋與t的問題下襬是 – UnholySheep

+0

預期結果是什麼樣子? – zer00ne

+0

這是一箇中等大小的數據集w。 2-300個條目,所以我想收集一個數組或對象中的重複條目,如下所示: ['string 1':15次,'string 2:12 times,'string 3:8 times] – user2868900

回答

2

function arrayRepeats(array) { 
 
    var returnObject = {}; 
 
    for (var i = 0; i < array.length; i++) { 
 
     if (returnObject[array[i]]) { 
 
      returnObject[array[i]]++; 
 
     } else { 
 
      returnObject[array[i]] = 1; 
 
     } 
 
    } 
 
    return returnObject; 
 
} 
 

 
var foo = ['1X31UX11','X3U11X1','33X11U12']; 
 
console.log(arrayRepeats(foo)); 
 
var bar = [1, 1, 2, 1, 3, 1, 31, 3, 1, 5, 4, 1]; 
 
console.log(arrayRepeats(bar));

+0

Ah yes , 謝謝!現在它使很多完美!我在類似的方法,但幾乎忘了else語句(使功能幾乎沒用) – user2868900

+0

@ user2868900你可以接受一個答案,以顯示訪問你的問題的人誰給你的答案 – zevee

1

使用Array#reduce收集每個字符串的出場數到一個對象:

var foo = ['1X31UX11','X3U11X1','33X11U12', '1X31UX11']; 
 

 
var result = foo.reduce(function(count, str) { 
 
    count[str] = (count[str] || 0) + 1; 
 
    
 
    return count; 
 
}, {}); 
 

 
console.log(result);