首页 > 解决方案 > JQuery InArray 无法正常工作?

问题描述

需要查找数组对象是否存在于数组中。我有一个 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)

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

标签: javascriptjqueryarraysarraylist

解决方案


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

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

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

比较您知道将是唯一的对象中的键可能会更好,例如"item_id"

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

推荐阅读