如果对象中存在值,则为Javascript吗?

时间:2016-01-30 08:49:35

标签: javascript node.js object exists

我有一个对象:

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

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

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

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

  1. 检查未定义的密钥并报告哪一个

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

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

5 个答案:

答案 0 :(得分:3)

我们假设我们从

开始
const obj = {foo : "bar"};

检查值:

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

检查属性:

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

答案 1 :(得分: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()检查。

答案 2 :(得分:1)

此函数使用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>');
&#13;
&#13;
&#13;

答案 3 :(得分:1)

没有内置功能,但可以使用Object.keys()[].some()完成:

&#13;
&#13;
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'));
&#13;
<script src="https://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
&#13;
&#13;

答案 4 :(得分:0)

我使用了此功能,以检查array2是否包含与array1相同的值。

const array1 = ['a','b','c','x'];
const array2 = ['z','y','x'];


function ContainsCommonItem3(arr1, arr2){
        return arr1.some(item => arr2.includes(item));
    }