2016-07-29 10 views
1

私は二次元配列を持っており、重複を削除しようとしています。私はjQuery関数inArrayでそれをやろうとしています。inArray bidimensional doesnt work

これは私の配列です:

var myArray = [ { data1 : "01" , data2 : "02" }, 
       { data1 : "01" , data2 : "03" }, 
       { data1 : "01" , data2 : "02" } ]; 
var newData = { data1 : "01" , data2 : "02" }; 

console.log($.inArray(newData, myArray)); 
    -1 

は、どのように私はこれを比較することができますか?

+0

希望の出力は何ですか? –

答えて

1

inArrayに役立ちます願っています。

あなたがオブジェクトのためのgrep /検索したいので最善の方法は常にある:だから

JSON.stringify(elementOfArray) == JSON.stringify(newData) 

、jQueryのでは、同じ内容を持つすべての要素をフィルタリングしたりgrepすることができます。

var myArray = [{data1: "01", data2: "02"}, 
 
       {data1: "01", data2: "03"}, 
 
       {data1: "01", data2: "02"}]; 
 
var newData = {data1: "01", data2: "02"}; 
 

 
var result = $.grep(myArray, function (elementOfArray, indexInArray) { 
 
    return JSON.stringify(elementOfArray) == JSON.stringify(newData); 
 
}); 
 

 
console.log(result.length); 
 

 

 
newData = {data1: "01", data2: "03"}; 
 
result = $.grep(myArray, function (elementOfArray, indexInArray) { 
 
    return JSON.stringify(elementOfArray) == JSON.stringify(newData); 
 
}); 
 

 
console.log(result.length);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

1

対象が異なるため、それは、例えば、それはこのようにそれをやってうまくいく...動作しないことができる:あなたが行うことができる唯一のことは、オブジェクトのプロパティを比較している

var myArray = [ { data1 : "01" , data2 : "02" }, 
 
       { data1 : "01" , data2 : "03" }, 
 
       { data1 : "01" , data2 : "02" } ]; 
 
var newData = myArray[0]; 
 

 
console.log($.inArray(newData, myArray));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

(または各オブジェクトにIDを追加してIDを比較する)...

また、比較するデータをシリアル化して、ArrayプロトタイプのfindIndexメソッドを使用することもできます。

var myArray = [ 
 
    {data1: "01", data2: "02"}, 
 
    {data1: "01", data2: "03"}, 
 
    {data1: "01", data2: "02"}, 
 
    {data1: "01", data2: "03"}, 
 
    {data1: "01", data2: "03"}, 
 
    {data1: "01", data2: "03"}, 
 
    {data1: "01", data2: "03"}, 
 
    {data1: "01", data2: "03"}, 
 
    {data1: "01", data2: "03"}, 
 
]; 
 
var data = {data1: "01", data2: "02"}; 
 

 
// Using jQuery's grep method 
 
console.time("time1") 
 
var result = $.grep(myArray, function (element) { 
 
    return JSON.stringify(element) == JSON.stringify(data); 
 
}); 
 
console.timeEnd("time1"); 
 
console.log(result.length); 
 

 
// Using Array's prototype findIndex method 
 
console.time("time2") 
 
result = myArray.findIndex(function(element){ 
 
\t return JSON.stringify(element) == JSON.stringify(data); 
 
}) 
 
console.timeEnd("time2"); 
 
console.log(result);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

それが最初の発生を発見し、それがより効率的ですので、他のアイテムをループ停止するためにブラウザがサポートしている場合は、内蔵findIndexメソッドを使用することをお勧めします。配列内の指定された値のため

を検索し、(見つからない場合は-1)そのインデックスを返します。それは

関連する問題