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

时间:2015-05-21 09:20:07

标签: javascript jquery arrays

我需要检查某个对象是否逻辑上在一个数组中,当两个对象在逻辑上相等时(就像Java中的$.inArray一样),它将被视为"在"数组

当我使用jQuery var a =[{value: "G27", title: "G27"}]; $.inArray({value: "G27", title: "G27"},a); //returns -1 来测试下面的代码时,它会返回-1,表示复制的一个不会被视为"在"数组。

{{1}}

以上只是一个例子,泛型案例是否有一种简单的方法可以实现

4 个答案:

答案 0 :(得分:1)

解决方法是检查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);

答案 1 :(得分:1)

如果您想使用underscore.js,可以尝试使用_.findWhere()

var a = [{value: "G27", title: "G27"}];
snippet.log(_.findWhere(a, {value: "G27", title: "G27"}) !== undefined); // returns true
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
<script src="http://underscorejs.org/underscore-min.js"></script>

答案 2 :(得分:0)

您可以使用数组的过滤方法。

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
}

答案 3 :(得分:0)

您可以尝试自定义搜索:

&#13;
&#13;
var indexOf = function(array, obj) {
  var i = array.length;
  var o;
  while (o = array[--i]) //note, its assignment
    if (obj.value === o.value && obj.title === o.title)
      break;
  return i;
};

var arr = [{
  value: "G27",
  title: "G27"
}, {
  value: "G28",
  title: "G28"
}, {
  value: "G29",
  title: "G29"
}];

console.log(indexOf(arr, {
  title: "G28",
  value: "G28"
})); //<-- 1

console.log(indexOf(arr, {
  title: "G30",
  value: "G30"
})); //<-- -1
&#13;
&#13;
&#13;