查找对象的值

时间:2012-11-30 18:03:03

标签: javascript jquery

JavaScript JQuery 中是否存在非基于循环的方法,可以检查来自对象属性的某些VALUE的存在。我的意思是,如果我有

obj = { prop1:val, prop2:val2 }

是否可能在 obj 的值中有一个语句检查是 val2

更新1:这里的循环不是关键!如果它包含在一些 JQuery 预定义函数中,我可以使用循环!

更新2: 我想,写一个手工制作的功能并不是那么优雅。我想找到一些基于库的解决方案来解决这个常见和常见的问题。

4 个答案:

答案 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))

演示:http://jsfiddle.net/J4TDS/

如果使用函数没问题,不需要查看库,只需几个字节:

function find(o, v) {
    for(var i in o) {
        if (o[i] === v) return true;
    }
}

find(obj, val2);