我在javascript中有一个对象
var obj = {
"a": "test1",
"b": "test2"
}
Run Code Online (Sandbox Code Playgroud)
如何检查对象中是否存在test1作为值?
Mat*_*ggi 94
您可以将Object的值转换为数组并测试字符串是否存在.它假定Object没有嵌套,并且字符串是完全匹配的:
var obj = { a: 'test1', b: 'test2' };
if (Object.values(obj).indexOf('test1') > -1) {
console.log('has test1');
}
Run Code Online (Sandbox Code Playgroud)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values
chi*_*ens 37
最短的 ES6+ 单线:
let exists = Object.values(obj).includes("test1");
Run Code Online (Sandbox Code Playgroud)
tym*_*eJV 30
您可以使用Array方法.some
:
var exists = Object.keys(obj).some(function(k) {
return obj[k] === "test1";
});
Run Code Online (Sandbox Code Playgroud)
jcu*_*bic 26
尝试:
var obj = {
"a": "test1",
"b": "test2"
};
Object.keys(obj).forEach(function(key) {
if (obj[key] == 'test1') {
alert('exists');
}
});
Run Code Online (Sandbox Code Playgroud)
要么
var obj = {
"a": "test1",
"b": "test2"
};
var found = Object.keys(obj).filter(function(key) {
return obj[key] === 'test1';
});
if (found.length) {
alert('exists');
}
Run Code Online (Sandbox Code Playgroud)
UPDATE这不会对工作NaN
和-0
对这些值,你可以使用(而不是===
在ES6)新:
Object.is(obj[key], value);
Run Code Online (Sandbox Code Playgroud)
isv*_*all 16
使用for...in
循环:
for (let k in obj) {
if (obj[k] === "test1") {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 14
您可以使用Object.values():
该
Object.values()
方法以for...in
循环提供的顺序返回给定对象自己的可枚举属性值的数组 (区别是for-in循环也枚举原型链中的属性)。
然后使用indexOf()方法:
该
indexOf()
方法返回可以在数组中找到给定元素的第一个索引;如果不存在,则返回-1。
例如:
Object.values(obj).indexOf("test`") >= 0
Run Code Online (Sandbox Code Playgroud)
下面是一个更详细的示例:
Object.values(obj).indexOf("test`") >= 0
Run Code Online (Sandbox Code Playgroud)
小智 13
对于单线,我会说:
exist = Object.values(obj).includes("test1");
console.log(exist);
Run Code Online (Sandbox Code Playgroud)
我对所有示例进行了测试,并在nodejs v8.11.2中进行了测试,以此为指南选择最佳选择。
let i,tt;
const obj = { a: 'test1', b: 'test2' , c: 'test3' , d: 'test4' , e: 'test5' , f: 'test6' };
console.time("test1")
i=0;
for(;i<1000000;i=i+1){
if (Object.values(obj).indexOf('test4') > -1) {
tt = true;
}
}
console.timeEnd("test1")
console.time("test1.1")
i=0;
for(;i<1000000;i=i+1){
if (~Object.values(obj).indexOf('test4')) {
tt = true;
}
}
console.timeEnd("test1.1")
console.time("test2")
i=0;
for(;i<1000000;i=i+1){
if (Object.values(obj).includes('test4')) {
tt = true;
}
}
console.timeEnd("test2")
console.time("test3")
i=0;
for(;i<1000000;i=i+1){
for(const item in obj){
if(obj[item] == 'test4'){
tt = true;
break;
}
}
}
console.timeEnd("test3")
console.time("test3.1")
i=0;
for(;i<1000000;i=i+1){
for(const [item,value] in obj){
if(value == 'test4'){
tt = true;
break;
}
}
}
console.timeEnd("test3.1")
console.time("test4")
i=0;
for(;i<1000000;i=i+1){
tt = Object.values(obj).some( (val,val2) => {
return val == "test4"
});
}
console.timeEnd("test4")
console.time("test5")
i=0;
for(;i<1000000;i=i+1){
const arr = Object.keys(obj);
const len = arr.length;
let i2=0;
for(;i2<len;i2=i2+1){
if(obj[arr[i2]]=="test4"){
tt = true;
break;
}
}
}
console.timeEnd("test5")
Run Code Online (Sandbox Code Playgroud)
在我的服务器上输出
test1: 272.325ms
test1.1: 246.316ms
test2: 251.980ms
test3: 73.284ms
test3.1: 102.029ms
test4: 339.299ms
test5: 85.527ms
Run Code Online (Sandbox Code Playgroud)
小智 5
你可以试试这个
var obj = {
"a": "test1",
"b": "test2"
};
const findSpecificStr = (obj, str) => {
return Object.values(obj).includes(str);
}
findSpecificStr(obj, 'test1');
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
168487 次 |
最近记录: |