我在javascript中有一个对象数组。对象包含一些属性,如下所示:
{ "Name" : "blabla", "Id": "1" }
现在我有一个函数接受一个参数,该参数将是对象的Name属性值。该函数看起来像这样:
function CheckForExistance(array, name){
var exist = false;
$.each(array, function(index, value){
if(value.Name == name)
{
exist = true;
return false;
}
});
return exist;
}
我想知道是否有更好的方法可以做到这一点?
答案 0 :(得分:4)
您可以使用$.grep()
将数组过滤为匹配项,并返回.length
的比较。
function CheckForExistance(array, name){
return $.grep(array, function(obj) {
return obj.Name == name;
}).length > 0;
}
或者本机方法是一个更好的IMO,但你需要旧浏览器的垫片。
function CheckForExistance(array, name){
return array.some(function(obj) {
return obj.Name == name;
});
}
这个使用Array.prototype.some
,并在给出真值返回值后立即退出,然后返回true
。如果没有找到真正的回报,那么它将返回false
。
FWIW,您可以通过提供动态属性名称使您的功能更加健壮。
function CheckForExistance(array, prop, val){
return array.some(function(obj) {
return obj[prop] == val;
});
}
然后用它来检查任何属性值。
var found = CheckForExistance(myArray, "Name", "blabla");
或者另一种方法是创建一个函数工厂,创建与迭代器一起使用的函数。
function havePropValue(prop, value) {
return function(obj) {
return obj[prop] == value;
};
}
然后我们可以直接使用.some()
而无需CheckForExistance
函数。
var found = myArray.some(havePropValue("Name", "blabla"));
或$.grep
。
var found = $.grep(myArray, havePropValue("Name", "blabla")).length > 0;
答案 1 :(得分:2)
如果它是一个简单的数组对象,为什么不只是循环它,而不是使它复杂化为什么在简单的JavaScript更简单时使用$.each
function CheckForExistance(array, name) {
for(var i=0;i<array.length;i++){
if(array[i].Name==name) return true;
}
return false;
}
答案 2 :(得分:0)
您还可以使用本机Array.fiter方法来确定名称x的对象是否存在。 Filter返回一个新数组,其中包含与回调函数匹配的所有元素(返回true)。 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter
如果新数组的长度大于0,则至少有一个匹配元素。
function checkForExistance(arrayOfItems, name) {
return arrayOfItems.filter(function (item) {
return item.Name === name;
}).length > 0;
}
var arr = [{
"Name": "blabla",
"Id": "1"
}, {
"Name": "foo",
"Id": "2"
}]
console.log(checkForExistance(arr, "foo"));
这在IE&lt; 9中不起作用,但如果你想让它在那里工作,你可以查看jQuery的$ .grep实现,它应该可以跨浏览器工作:)
function checkForExistance(arrayOfItems, name) {
return $.grep(arrayOfItems, function (item) {
return item.Name === name;
}).length > 0;
}
var arr = [{
"Name": "blabla",
"Id": "1"
}, {
"Name": "foo",
"Id": "2"
}]
console.log(checkForExistance(arr, "foo"));
答案 3 :(得分:-1)
这应该有效:
function CheckForExistance(array, name){
var exist = false;
$.each(array, function(index, value){
if (value == name) {
exist = true;
}
});
return exist;
}
value.Name不是字符串。 通过数组循环时,您将获得索引和值。
例如: 数组{1:“foo”,2:“bar”}给你 index:1,值:“foo” index:2,value:“bar”
值是您要与变量'name'进行比较的值。
2: 在“存在”为真之后,您返回了false。这永远不会给'回归真实'。在“存在”之后,你应该回归存在。
我认为我的代码就是你要找的。 p>