我需要检查某个对象是否逻辑上在一个数组中,当两个对象在逻辑上相等时(就像Java中的$.inArray
一样),它将被视为"在"数组
当我使用jQuery
var a =[{value: "G27", title: "G27"}];
$.inArray({value: "G27", title: "G27"},a); //returns -1
来测试下面的代码时,它会返回-1,表示复制的一个不会被视为"在"数组。
{{1}}
以上只是一个例子,泛型案例是否有一种简单的方法可以实现
答案 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)
您可以尝试自定义搜索:
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;