亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取JavaScript數組中的所有唯一值(刪除重復項)

獲取JavaScript數組中的所有唯一值(刪除重復項)

獲取JavaScript數組中的所有唯一值(刪除重復項)我有一系列數字,我需要確保它們是唯一的。我在互聯網上找到了下面的代碼片段,它的工作情況很好,直到數組中的數字為零。我發現這個其他腳本在SO上看起來幾乎就像它,但它不會失敗。所以為了幫助我學習,有人可以幫我確定原型腳本出錯的地方嗎?Array.prototype.getUnique = function() {  var o = {}, a = [], i, e;  for (i = 0; e = this[i]; i++) {o[e] = 1};  for (e in o) {a.push (e)};  return a;}
查看完整描述

4 回答

?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

更新了ES6 / ES2015的答案:使用Set,單行解決方案是:

var items = [4,5,4,6,3,4,5,2,23,1,4,4,4]var uniqueItems = Array.from(new Set(items))

哪個回報

[4, 5, 6, 3, 2, 23, 1]

正如le_m建議的那樣,這也可以使用spread運算符縮短,比如

var uniqueItems = [...new Set(items)]


查看完整回答
反對 回復 2019-05-23
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

One Liner,Pure JavaScript

使用ES6語法

list = list.filter((x, i, a) => a.indexOf(x) == i)

x --> item in array
i --> index of item
a --> array reference, (in this case "list")


使用ES5語法

list = list.filter(function (x, i, a) { 
    return a.indexOf(x) == i; });

瀏覽器兼容性:IE9 +


查看完整回答
反對 回復 2019-05-23
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

我后來發現了一個使用jQuery的好方法

arr = $.grep(arr, function(v, k){
    return $.inArray(v ,arr) === k;});


查看完整回答
反對 回復 2019-05-23
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

ES6的最短解決方案: [...new Set( [1, 1, 2] )];

或者,如果要修改Array原型(如原始問題中所示):

Array.prototype.getUnique = function() {
    return [...new Set( [this] )];};

EcmaScript 6目前僅在現代瀏覽器中部分實現(2015年8月),但是Babel已經變得非常流行,可以將ES6(甚至是ES7)轉換回ES5。那樣你今天就可以編寫ES6代碼了!

如果你想知道...它意味著什么,它就叫做傳播算子。來自MDN:?擴展運算符允許在需要多個參數(用于函數調用)或多個元素(用于數組文字)的地方擴展表達式?。因為Set是可迭代的(并且只能具有唯一值),所以擴展運算符將展開Set以填充數組。

學習ES6的資源:


查看完整回答
反對 回復 2019-05-23
  • 4 回答
  • 0 關注
  • 1867 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號