如何使用 JavaScript 检查对象中是否存在值

IT技术 javascript
2021-02-19 00:29:08

我在 JavaScript 中有一个对象:

var obj = {
   "a": "test1",
   "b": "test2"
}

如何检查 test1 是否作为值存在于对象中?

6个回答

您可以将对象的值转换为数组并测试字符串是否存在。它假设对象没有嵌套并且字符串是完全匹配的:

var obj = { a: 'test1', b: 'test2' };
if (Object.values(obj).indexOf('test1') > -1) {
   console.log('has test1');
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values

这是 Ecma2017 的一部分,尚未用于大多数用途:(
2021-04-30 00:29:08
稍微不那么冗长: if(Object.values(obj).includes('test1')) { ... }
2021-05-06 00:29:08
IE 11 和 Edge 不支持,最好使用 for..in 循环,如下所述
2021-05-10 00:29:08
Tbh,我更喜欢@nickb 版本,也许考虑更新?
2021-05-14 00:29:08

您可以使用数组方法.some

var exists = Object.keys(obj).some(function(k) {
    return obj[k] === "test1";
});
Object.values 不支持 IE。我建议使用 Object.keys developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-05-01 00:29:08
不那么冗长,使用Object.values:``` var exists = Object.values(obj).some(function(k) { return k === "test1"; }); ``
2021-05-05 00:29:08

尝试:

var obj = {
   "a": "test1",
   "b": "test2"
};

Object.keys(obj).forEach(function(key) {
  if (obj[key] == 'test1') {
    alert('exists');
  }
});

或者

var obj = {
   "a": "test1",
   "b": "test2"
};

var found = Object.keys(obj).filter(function(key) {
  return obj[key] === 'test1';
});

if (found.length) {
   alert('exists');
}

这不会对工作NaN-0这些value观。您可以使用(而不是===)ECMAScript 6 中的新内容:

 Object.is(obj[key], value);

使用现代浏览器,您还可以使用:

var obj = {
   "a": "test1",
   "b": "test2"
};

if (Object.values(obj).includes('test1')) {
  alert('exists');
}

最短的 ES6+ 单线:

let exists = Object.values(obj).includes("test1");
请注意 IE 不支持 .includes(),因此请仅在服务器端与 Node 一起使用它,或者如果您根本不关心 IE。
2021-05-09 00:29:08

使用for...in循环:

for (let k in obj) {
    if (obj[k] === "test1") {
        return true;
    }
}
被严重低估的答案,这个方法的表现比任何其他方法都要好
2021-05-05 00:29:08
@Gregor 没关系,因为在取下一个值时再次定义了 'k'。
2021-05-13 00:29:08