У меня есть объект в javascript
var obj = {
"a": "test1",
"b": "test2"
}
Как проверить, что test1 существует в объекте как значение?
У меня есть объект в javascript
var obj = {
"a": "test1",
"b": "test2"
}
Как проверить, что test1 существует в объекте как значение?
Вы можете повернуть значения объекта в массив и проверить, присутствует ли строка. Он предполагает, что объект не вложен, а строка является точным совпадением:
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
Вы можете использовать метод Array .some
:
var exists = Object.keys(obj).some(function(k) {
return obj[k] === "test1";
});
попробуйте:
var obj = {
"a": "test1",
"b": "test2"
};
Object.keys(obj).forEach(function(key) {
if (obj[key] == 'test1') {
alert('exists');
}
});
Используйте for...in
цикл:
for (let k in obj) {
if (obj[k] === "test1") {
return true;
}
}
Вы можете использовать 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
Я провел тест со всеми этими примерами, я выполнил это в 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")
Вы можете попробовать следующее:
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"); }));
за один лайнер я бы сказал
exist=Object.values(obj).includes("test1");
console.log(exist);
Самый короткий ES6+ один вкладыш:
let exist = Object.values(obj).includes("test1");
Из предложенных решений и jsperf я собрал вместе, мы видим, что метод для... in является оптимальным решением, предложенным @isvforall
var obj = {"a": "test1", "b": "test2"};
var getValuesOfObject = Object.values(obj)
for(index = 0; index < getValuesOfObject.length; index++){
return Boolean(getValuesOfObject[index] === "test1")
}
if( myObj.hasOwnProperty('key') && myObj['key'] === value ){
...
}
Это должна быть простая проверка.
Пример 1
var myObj = {"a": "test1"}
if(myObj.a == "test1") {
alert("test1 exists!");
}