如果对象中存在值,则使用 Javascript?

新手上路,请多包涵

我有一个对象:

 var car = {
    company: "Honda",
    year: "2011",
    Model: "Brio"
}

我想知道是否存在继承方法(这是正确的短语吗?)来检查给定对象中是否存在值,有点像 x.hasOwnPropertyif (x in car) 。或者,我应该自己写。

我做了一些谷歌搜索,但它们都导致 hasOwnProperty 或检查数组中是否存在值。

编辑以取悦评论中的所有人:我可以想到两个用例,这在哪些地方有用:

  1. 检查未定义的键并报告是哪一个
   if (!car.isInvalid(car, undefined))
       validCarsArray.push (car);

  1. 检查对象中是否存在一般用户输入
   var text = searchBox.input;

   validCarArrays.forEach (function (car) {
       if (car.hasOwnValue(car, text)) {
       displayToUserAsResult (car);
       }
   });

原文由 Daedalus 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 301
2 个回答

不,没有内置方法来搜索对象的值。

这样做的唯一方法是遍历对象的所有键并检查每个值。使用即使在旧浏览器中也能工作的技术,您可以这样做:

 function findValue(o, value) {
    for (var prop in o) {
        if (o.hasOwnProperty(prop) && o[prop] === value) {
            return prop;
        }
    }
    return null;
}

findValue(car, "2011");    // will return "year"
findValue(car, "2012");    // will return null

注意:这将返回包含搜索值的第一个属性,即使可能有多个匹配的属性。以效率为代价,您可以返回包含所需值的所有属性的数组。

注意:这使用额外的 .hasOwnProperty() 检查作为防止任何将可枚举属性添加到 Object.prototype 代码的保护措施。如果没有这样的代码,并且您确定永远不会有,那么可以取消 .hasOwnProperty() 检查。

原文由 jfriend00 发布,翻译遵循 CC BY-SA 3.0 许可协议

假设我们从

const obj = {foo : "bar"};

检查一个值:

 const hasValue = Object.values(obj).includes("bar");

检查属性:

 // NOTE: Requires obj.toString() if key is a number
const hasProperty = Object.keys(obj).includes("foo");

多层次价值:

 function hasValueDeep(json, findValue) {
    const values = Object.values(json);
    let hasValue = values.includes(findValue);
    values.forEach(function(value) {
        if (typeof value === "object") {
            hasValue = hasValue || hasValueDeep(value, findValue);
        }
    })
    return hasValue;
}

多层属性:

 function hasPropertyDeep(json, findProperty) {
    const keys = Object.keys(json);
    let hasProperty = keys.includes((findProperty).toString());
    keys.forEach(function(key) {
        const value = json[key];
        if (typeof value === "object") {
            hasProperty = hasProperty || hasPropertyDeep(value, findProperty);
        }
    })
    return hasProperty;
}

原文由 Gibolt 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题