我有一个二维数组,我正在尝试删除重复项,我正在尝试使用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
我该如何比较?
答案 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)
在数组中搜索指定的值并返回其索引(如果未找到则返回-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>