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

时间:2016-03-11 19:47:37

标签: javascript

我在javascript中有一个对象

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

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

18 个答案:

答案 0 :(得分:79)

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

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

答案 1 :(得分:27)

您可以使用Array方法.some

var exists = Object.keys(obj).some(function(k) {
    return obj[k] === "test1";
});

答案 2 :(得分:21)

尝试:



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这些值不起作用,您可以在ES6中使用(而非===)新内容:

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

答案 3 :(得分:12)

使用for...in循环:

for (let k in obj) {
    if (obj[k] === "test1") {
        return true;
    }
}

答案 4 :(得分:7)

您可以使用Object.values()

  

Object.values()方法返回给定对象自己的数组   可枚举的属性值,其顺序与   for...in循环(区别是for-in循环枚举   原型链中的属性)。

,然后使用indexOf()方法:

  

indexOf()方法返回给定索引的第一个索引   元素可以在数组中找到;如果不存在,则为-1。

例如:

Object.values(obj).indexOf("test`") >= 0

下面是一个更详细的示例:

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


console.log(Object.values(obj).indexOf("test1")); // 0
console.log(Object.values(obj).indexOf("test2")); // 1

console.log(Object.values(obj).indexOf("test1") >= 0); // true
console.log(Object.values(obj).indexOf("test2") >= 0); // true 

console.log(Object.values(obj).indexOf("test10")); // -1
console.log(Object.values(obj).indexOf("test10") >= 0); // false

答案 5 :(得分:5)

我对所有示例进行了测试,我在 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")
&#13;
&#13;
&#13;

我的服务器输出

test1: 272.325ms
test1.1: 246.316ms
test2: 251.980ms
test3: 73.284ms
test3.1: 102.029ms
test4: 339.299ms
test5: 85.527ms

答案 6 :(得分:3)

最短的ES6 +衬板:

let exist = Object.values(obj).includes("test1");

答案 7 :(得分:2)

你可以试试这个:

function checkIfExistingValue(obj, key, value) {
    return obj.hasOwnProperty(key) && obj[key] === value;
}
var test = [{name : "jack", sex: F}, {name: "joe", sex: M}]
console.log(test.some(function(person) { return checkIfExistingValue(person, "name", "jack"); }));

答案 8 :(得分:2)

我会说

exist=Object.values(obj).includes("test1");
console.log(exist);

答案 9 :(得分:1)

使用 Object.keys() 查找对象中存在的值的最佳方法

obj = {
 "India" : {
 "Karnataka" : ["Bangalore", "Mysore"],
 "Maharashtra" : ["Mumbai", "Pune"]
 },
 "USA" : {
 "Texas" : ["Dallas", "Houston"],
 "IL" : ["Chicago", "Aurora", "Pune"]
 }
}

function nameCity(e){
    var finalAns = []
    var ans = [];
    ans = Object.keys(e).forEach((a)=>{
        for(var c in e[a]){
            e[a][c].forEach(v=>{
                if(v === "Pune"){
                    finalAns.push(c)
                }
            })

        }
    })
    console.log(finalAns)
}


nameCity(obj)

答案 10 :(得分:0)

if (Object.values(obj).includes('test1')){
   return true
}

答案 11 :(得分:0)

在新版本中,如果 ecma 脚本现在我们可以通过 ?. 操作检查 vslues..

检查对象或嵌套对象中的值是如此简单和容易

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

if(obj?.a) return "i got the value"

同样,因为在 Javascript 中最常用的原始类型是 Object

我们也可以使用这个数组、函数等

aFunc = () => { return "gotcha"; }

aFunc?.() // returns gotcha

myArray = [1,2,3]

myArray?.[3] // returns undefined

谢谢

答案 12 :(得分:0)

您可以尝试这个

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

const findSpecificStr = (obj, str) => {
  return Object.values(obj).includes(str);
}

findSpecificStr(obj, 'test1');

答案 13 :(得分:0)

getValue = function (object, key) {
    return key.split(".").reduce(function (obj, val) {
        return (typeof obj == "undefined" || obj === null || obj === "") ? obj : (_.isString(obj[val]) ? obj[val].trim() : obj[val]);}, object);
};

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

函数调用:

 getValue(obj, "a");

答案 14 :(得分:-2)

var obj = {"a": "test1", "b": "test2"};
var getValuesOfObject = Object.values(obj)
for(index = 0; index < getValuesOfObject.length; index++){
    return Boolean(getValuesOfObject[index] === "test1")
}

答案 15 :(得分:-3)

if( myObj.hasOwnProperty('key') && myObj['key'] === value ){
    ...
}

答案 16 :(得分:-5)

下面是对此的简单答案。

之所以可行,是因为每种JavaScript类型在其 prototype ”上都有一个“构造函数” 属性。

let array = []
array.constructor === Array
// => true


let data = {}
data.constructor === Object
// => true

答案 17 :(得分:-6)

这应该是一个简单的检查。

示例1

   var myObj = {"a": "test1"}

if(myObj.a == "test1") {
    alert("test1 exists!");
}