same 如何防止添加重複的鍵到一個JavaScript數組




jquery array unique (4)

我發現了很多相關的問題,在循環中使用hasOwnProperty來回答,但我沒有做任何事情。 我想要做的就是檢查一個數組中是否存在一個鍵,如果沒有,就添加它。

我從一個空數組開始,然後添加鍵,因為頁面是用jQuery來清理的。

最初,我希望像下面這樣簡單的東西可以工作:(使用通用名稱)

if (!array[key])
   array[key] = value;

不行。 跟隨它:

for (var in array) {
   if (!array.hasOwnProperty(var))
      array[key] = value;
}

還試過:

if (array.hasOwnProperty(key) == false)
   array[key] = value;

這一切都沒有奏效。 要么沒有什麼被推到數組,或者我所嘗試的只是簡單地聲明array[key] = value為什麼這麼簡單這麼難做到。 任何想法,使這項工作?


var a = [1,2,3], b = [4,1,5,2];

b.forEach(function(value){
  if (a.indexOf(value)==-1) a.push(value);
});

console.log(a);
// [1, 2, 3, 4, 5]

有關更多詳細信息,請參閱Array.indexOf

如果你想依靠jQuery,而是使用jQuery.inArray

$.each(b,function(value){
  if ($.inArray(value,a)==-1) a.push(value);
});

如果你的所有值都是簡單而唯一的可表示的字符串 ,那麼你應該使用一個Object而不是一個Array來實現巨大的速度增加(如@JonathanSampson的回答所描述的那樣)。


function check (list){
    var foundRepeatingValue = false;
    var newList = [];
    for(i=0;i<list.length;i++){
        var thisValue = list[i];
        if(i>0){
            if(newList.indexOf(thisValue)>-1){
                foundRepeatingValue = true;
                console.log("getting repeated");
                return true;
            }
       } newList.push(thisValue);
    } return false;
}

var list1 = ["dse","dfg","dse"];
check(list1);

輸出:

getting repeated
true

一般來說,使用對象可以更好地完成這個任務,因為JavaScript並沒有真正的關聯數組:

var foo = { bar: 0 };

然後用來檢查一個密鑰:

if ( !( 'bar' in foo ) ) {
    foo['bar'] = 42;
}

正如在下面的評論中正確地指出的那樣, 只有當你的鍵是字符串或者可以表示為字符串(如數字)的項時,這個方法才是有用的。






key-value