如果一个对象中存在一个值的Javascript?

我得到了一个对象:

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

我想知道是否存在一个inheritance的方法(是否正确的短语?)来检查一个给定的对象内是否存在一个值,有点像x.hasOwnProperty ,或者if (x in car) 。 或者,我应该写我自己的。

我做了几个谷歌search,但他们都导致hasOwnProperty或检查数组中是否存在一个值。

编辑讨好所有的人在评论:有两个用例,我可以想到这将是有用的:

  1. 检查未定义的键和报告哪一个

     if (!car.isInvalid(car, undefined)) validCarsArray.push (car); 
  2. 检查对象中是否存在一般用户input

     var text = searchBox.input; validCarArrays.forEach (function (car) { if (car.hasOwnValue(car, text)) { displayToUserAsResult (car); } }); 

不,没有内置的方法来search对象上的值。

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

 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 

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

注意:这会使用额外的.hasOwnProperty()检查来防止任何将可枚举属性添加到Object.prototype代码。 如果没有这样的代码,你肯定永远不会有,那么.hasOwnProperty()检查可以被消除。

没有内置函数,但可以使用Object.keys()[].some()

 function hasValue(obj, value) { return Object.keys(obj).some((key) => obj[key] == value); } var car = { company: "Honda", year: "2011", Model: "Brio" } snippet.log('car has Honda: ' + hasValue(car, 'Honda')); snippet.log('car has NotHonda: ' + hasValue(car, 'NotHonda')); 
 <script src="https://tjcrowder.github.io/simple-snippets-console/snippet.js"></script> 

此函数使用Object.keys()并返回一个数组,其中包含具有给定值的对象的键。

Object.keys()方法返回给定对象自己可枚举属性的数组,其顺序与for ... in循环所提供的顺序相同(区别在于for-in循环枚举了原型链中的属性,如好)。

 var car = { company: "Honda", year: "2011", Model: "Brio" }; function getKeysWithValue(v, o) { return Object.keys(o).filter(function (k) { return o[k] === v; }); } document.write('<pre>' + JSON.stringify(getKeysWithValue('Honda', car), 0, 4) + '</pre>'); 

比方说,我们开始

 const obj = {foo : "bar"}; 

检查一个值:

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

检查属性:

 const hasProperty = Object.keys(obj).includes("foo");