如何检查对象是否逻辑上在数组中,JavaScript

如何检查对象是否逻辑上在数组中,JavaScript,javascript,jquery,arrays,Javascript,Jquery,Arrays,我需要检查一个对象在逻辑上是否在数组中,当两个对象在逻辑上相等时(就像Java中的等于),它将被视为数组中的“in” 当我使用jQuery的$.inArray来测试下面的代码时,它返回-1,表示复制的代码没有被视为数组中的“in” var a =[{value: "G27", title: "G27"}]; $.inArray({value: "G27", title: "G27"},a); //returns -1 var arr = [{value: "G27", title: "G27"

我需要检查一个对象在逻辑上是否在数组中,当两个对象在逻辑上相等时(就像Java中的
等于
),它将被视为数组中的“in”

当我使用
jQuery
$.inArray
来测试下面的代码时,它返回-1,表示复制的代码没有被视为数组中的“in”

var a =[{value: "G27", title: "G27"}];
$.inArray({value: "G27", title: "G27"},a); //returns -1
var arr = [{value: "G27", title: "G27"}];
// Don't call filter on arr because this will mutate arr itself. Instead of creating a new array.
var filteredArr = Array.prototype.filter.call(arr, function(item) {
    return item.value == "G27" && iem.title == "G27";
});

if(filteredArr.length > 0) {
    // Item exists
}

上面只是一个例子,对于通用案例,是否有一种简单的方法来实现一种解决方法是检查for循环中的每个键值对:

function exist(arr, obj){
  var len = Object.keys(obj).length;
  var count = 0;
  for(var i=0;i<arr.length;i++){
      count=0;
      for(var key in obj){
          if(obj[key] == arr[i][key]){
            count++;
          }
      }
      if(count == len && count == Object.keys(arr[i]).length){
        console.log("Exists!!");
        return;
      }
  }
  console.log("Don't exist!!");
}

var arr =[{value: "G27", title: "G27"}];
var b = {value: "G27", title: "G27"};
//Call
exist(arr, b);
功能存在(arr、obj){
var len=Object.keys(obj.length);
var计数=0;

对于(var i=0;i您可以使用数组的filter方法

var a =[{value: "G27", title: "G27"}];
$.inArray({value: "G27", title: "G27"},a); //returns -1
var arr = [{value: "G27", title: "G27"}];
// Don't call filter on arr because this will mutate arr itself. Instead of creating a new array.
var filteredArr = Array.prototype.filter.call(arr, function(item) {
    return item.value == "G27" && iem.title == "G27";
});

if(filteredArr.length > 0) {
    // Item exists
}

如果您想使用下划线.js,可以尝试使用:

var a=[{value:“G27”,title:“G27”}];
snippet.log(u.findWhere(a,{value:“G27”,title:“G27”})!==未定义);//返回true

您可以尝试自定义搜索:

var indexOf=函数(数组,obj){
var i=数组长度;
var o;
而(o=array[--i])//注意,它的赋值
if(obj.value==o.value&&obj.title==o.title)
打破
返回i;
};
var arr=[{
值:“G27”,
标题:“G27”
}, {
价值:“G28”,
标题:“G28”
}, {
值:“G29”,
标题:“G29”
}];
控制台日志(indexOf(arr{
标题:“G28”,
价值:“G28”

}));//在javascript中,没有两个对象是相同的,所以这通常是很困难的,您可能应该尝试找到一种更好的数据结构方式。您正在创建两个对象,但当您这样做时,它会起作用:
var b={value:“G27”,title:“G27”};var a=[b];$.inArray(b,a);//返回0
我想您可能会在这里找到一个可能的答案:[array.contains(obj)in JavaScript][1]![1]:这是一个非动态解决方案,因为它假设一个简单的对象只有键/值属性。因此,每次向该对象添加新属性时,他都必须编辑此loopHi@scimonester,拒绝我的编辑没有问题。我看到你的答案做得更好,我只是喜欢你的答案,并试图证明它是如何工作的:)问题在于对象定义,例如:
{title:“G28”,value:“G28”}
{title:“G28”,value:“G28”}
{value:“G28”,title:“G28”}