jQuery InArray无法正常工作?

时间:2018-08-29 17:11:13

标签: javascript jquery arrays arraylist

需要查找数组中是否存在数组对象。我有一个arrayObject和数组集合。

我的代码:

var array = [
{
    id:0,
    item_fields:{text: "stack", type: "2", options: null},
    item_id:"540551c1-1744-4f09-920f-75350ba23cb6",
    item_parent:"e50b00d5-8c3e-449e-92ba-41ff9d46babe",
    sequence:-1
},

{
    id:0,
    item_field_type:"multiChoiceNumeric",
    item_fields:{text: "overflow", type: "RangeNumeric", options: null},
    item_id:"1bacc69f-d8c9-4107-af60-295f8994d249",
    item_parent:"e50b00d5-8c3e-449e-92ba-41ff9d46babe",
    sequence:-1
}];

var arrObj = 
{
    id:0,
    item_field_type:"multiChoiceNumeric",
    item_fields:{text: "stack", type: "2", options: null},
    item_id:"540551c1",
    item_parent:"e50b00d5",
    sequence:-1
}

此查询返回false:

array.some(function(element){return element == arrObj})

此查询返回-1(如果找不到):

jQuery.inArray(arrObj,array)

为什么两个查询都返回未找到的结果?我应该怎么做才能得到正确的结果?

1 个答案:

答案 0 :(得分:1)

在JavaScript中,对Object的变量赋值类似于C中的指针;该变量是对对象的内存位置的引用,而不是对象及其内容本身的引用。

var x = {};
var y = {};
x === y;
// false

您可以更新array.some()中的回调以检查深度相等性,而不是比较对象引用的相等性,但这会很麻烦。

最好在您知道唯一的对象(例如"item_id")中比较一个键:

array.some(function(element) {
  return element.item_id === arrObj.item_id;
});