2016-07-29 177 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方法,如果你的浏览器支持它,因为它找到的第一次出现,并停止通过其他物品循环所以它的效率更高。希望它可以帮助