inArray bidimensional不起作用

时间:2016-07-29 12:04:59

标签: javascript jquery arrays

我有一个二维数组,我正在尝试删除重复项,我正在尝试使用jquery函数inArray。

这是我的阵列:

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

我该如何比较?

2 个答案:

答案 0 :(得分: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){
	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 :(得分: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>