Подтвердить что ты не робот

Как проверить, существует ли значение в объекте с помощью javascript

У меня есть объект в javascript

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

Как проверить, что test1 существует в объекте как значение?

4b9b3361

Ответ 1

Вы можете повернуть значения объекта в массив и проверить, присутствует ли строка. Он предполагает, что объект не вложен, а строка является точным совпадением:

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

Ответ 2

Вы можете использовать метод Array .some:

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

Ответ 3

попробуйте:

var obj = {
   "a": "test1",
   "b": "test2"
};
Object.keys(obj).forEach(function(key) {
  if (obj[key] == 'test1') {
    alert('exists');
  }
});

Ответ 4

Используйте for...in цикл:

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

Ответ 5

Вы можете использовать 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

Ответ 6

Я провел тест со всеми этими примерами, я выполнил это в 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")

Ответ 7

Вы можете попробовать следующее:

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

за один лайнер я бы сказал

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

Ответ 9

Самый короткий ES6+ один вкладыш:

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

Ответ 10

Из предложенных решений и jsperf я собрал вместе, мы видим, что метод для... in является оптимальным решением, предложенным @isvforall

http://jsperf.com/value-check-in-object/3

Ответ 11

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

Ответ 12

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

Ответ 13

Это должна быть простая проверка.

Пример 1

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

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