2017-01-10 5 views

答えて

6

あなたはabに存在するかどうかを確認してからプッシュを使用するsome()every()最初に使用することができます。

var a = ["username1", "1"]; 
 
var b = [ ["username1", "1"], ["username2", "2"] ]; 
 

 
var check = b.some(function(e) { 
 
    return a.length == e.length && a.every(function(c) { 
 
    return e.includes(c) 
 
    }) 
 
}) 
 

 
if (!check) b.push(a); 
 
console.log(b)

1

重複を防ぐことのない自動的な方法はありません、あなたは彼らのために自分でチェックする必要があります。

スニペットを確認します。

var a = ["username1", "1"]; 
var b = [ a, ["username2", "2"] ]; 

if(b.find(function(element) { return element == a })) { 
    b.push(a); 
} 

レコードがb配列に異なるIDを持っている場合は、その中の値をチェックする必要があります。

あなたは次のようにそれを行うことができます。

var a = ["username1", "1"]; 
var b = [ ["username1", "1"], ["username2", "2"] ]; 

if(b.find(function(element) { return element[0] == a[0] })) { 
    b.push(a); 
} 
+0

これは動作しません。なぜなら '=='はアイデンティティをチェックし、2つのオブジェクトを比較するときは等価でないからです。 – Thomas

+0

あなたが正しいです、この場合、 'a'は' b'配列の中になければなりません。私はあなたが説明している場合のために私の答えを更新しました。 –

1

JSON文字列に変換し、配列を比較します。

var a = ["username1", "1"]; 
 
var a1 = ["username3", "1"]; 
 
var b = [ 
 
    ["username1", "1"], 
 
    ["username2", "2"] 
 
]; 
 

 
Array.prototype.pushCustom = function(item) { 
 
    if (this.every(function(v) { 
 
    return JSON.stringify(v) != JSON.stringify(item); 
 
    })) 
 
    this.push(item); 
 
}; 
 

 
b.pushCustom(a); 
 
b.pushCustom(a1); 
 

 
console.log(b);

関連する問題