2016-07-29 169 views
1

我有一個二維數組,我試圖刪除重複項,我試圖用jQuery的函數inArray做到這一點。inArray bidimensional does not 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

搜索一個特定值的數組中,並返回其索引(或-1,如果未找到)。

因爲要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方法,如果你的瀏覽器支持它,因爲它找到的第一次出現,並停止通過其他物品循環所以它的效率更高。希望它可以幫助