JavaScript 或 JQuery 中是否存在非基于循环的方法,可以检查来自对象属性的某些VALUE的存在。我的意思是,如果我有
obj = { prop1:val, prop2:val2 }
是否可能在 obj 的值中有一个语句检查是 val2 ?
更新1:这里的循环不是关键!如果它包含在一些 JQuery 预定义函数中,我可以使用循环!
更新2: 我想,写一个手工制作的功能并不是那么优雅。我想找到一些基于库的解决方案来解决这个常见和常见的问题。
答案 0 :(得分:4)
不能在没有循环的情况下找不到一个语句中的对象中是否存在值。
您可以使用本机API或库..但它们将在内部循环所有值。
任何其他方法的收费都与迭代对象相同。所以我会编写一个简单的for
循环来完成它。
我只是在我的脚本文件中编写这4行代码并包含该脚本文件而不是包含库..这将是相同的。 http://jsfiddle.net/sQW4P/2/< - 如果您需要这样的功能,请注意。
答案 1 :(得分:1)
这适用于jQuery:
$.grep($.map(obj, function(v,k){return v}), function(el){return el == val2})
你可以像这样包装它:
function hasVal(o, v) {
$.grep($.map(o, function(v,k){return v}), function(el){return el == v}).length > 0
}
答案 2 :(得分:1)
如果您使用外部库,Underscore.js相当简洁:
_.contains(_.values(obj), "val2");
// true
这是Underscore的values方法:
返回对象属性的所有值。
以下是source code:
的实现// Retrieve the values of an object's properties.
_.values = function(obj) {
var values = [];
for (var key in obj) if (_.has(obj, key)) values.push(obj[key]);
return values;
};
如您所见,它只是遍历对象中的键,并将它们推送到数组。所以,不,没有迭代就不可能做到这一点。
答案 3 :(得分:0)
我能想到的唯一方法是JSON:
new RegExp(':\"'+val+'\"').test(JSON.stringify(obj))
如果使用函数没问题,不需要查看库,只需几个字节:
function find(o, v) {
for(var i in o) {
if (o[i] === v) return true;
}
}
find(obj, val2);