Saya memiliki objek di JavaScript:
var obj = {
"a": "test1",
"b": "test2"
}
Bagaimana cara memeriksa bahwa test1 ada di objek sebagai nilai?
Saya memiliki objek di JavaScript:
var obj = {
"a": "test1",
"b": "test2"
}
Bagaimana cara memeriksa bahwa test1 ada di objek sebagai nilai?
Jawaban:
Anda dapat mengubah nilai Objek menjadi larik dan menguji apakah ada string. Ini mengasumsikan bahwa Objek tidak bersarang dan stringnya sama persis:
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
if(Object.values(obj).includes('test1')) { ... }
Mencoba:
var obj = {
"a": "test1",
"b": "test2"
};
Object.keys(obj).forEach(function(key) {
if (obj[key] == 'test1') {
alert('exists');
}
});
Atau
var obj = {
"a": "test1",
"b": "test2"
};
var found = Object.keys(obj).filter(function(key) {
return obj[key] === 'test1';
});
if (found.length) {
alert('exists');
}
Ini tidak akan berhasil untuk NaNdan -0untuk nilai-nilai itu. Anda dapat menggunakan (alih-alih ===) apa yang baru di ECMAScript 6:
Object.is(obj[key], value);
Dengan browser modern, Anda juga dapat menggunakan:
var obj = {
"a": "test1",
"b": "test2"
};
if (Object.values(obj).includes('test1')) {
alert('exists');
}
ES6 terpendek + satu liner:
let exists = Object.values(obj).includes("test1");
Anda bisa menggunakan Object.values () :
The
Object.values()Metode mengembalikan array sendiri nilai properti enumerable suatu objek tertentu, dalam urutan yang sama seperti yang disediakan olehfor...inlingkaran (perbedaan adalah bahwa untuk-sifat lingkaran menyebutkan dalam rantai prototipe juga).
lalu gunakan metode indexOf () :
The
indexOf()method mengembalikan indeks pertama di mana elemen tertentu dapat ditemukan dalam array, atau -1 jika tidak hadir.
Sebagai contoh:
Object.values(obj).indexOf("test`") >= 0
Contoh yang lebih bertele-tele ada di bawah ini:
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
Saya melakukan tes dengan semua contoh ini, dan saya menjalankan ini di Node.js v8.11.2 . Ambil ini sebagai panduan untuk memilih pilihan terbaik Anda.
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")
Output di server saya
test1: 272.325 ms
test1.1: 246.316 ms
test2: 251.98 0ms
test3: 73.284 ms
test3.1: 102.029 ms
test4: 339.299 ms
test5: 85.527 ms
Untuk satu baris, saya akan mengatakan:
exist = Object.values(obj).includes("test1");
console.log(exist);
Anda bisa mencoba ini:
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"); }));
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"
};
Fungsi yang disebut:
getValue(obj, "a");
var obj = {"a": "test1", "b": "test2"};
var getValuesOfObject = Object.values(obj)
for(index = 0; index < getValuesOfObject.length; index++){
return Boolean(getValuesOfObject[index] === "test1")
}
Metode Object.values () mengembalikan larik (ditugaskan ke getValuesOfObject) yang berisi nilai properti enumerable milik objek (obj) yang diberikan. Larik fordiulang menggunakan perulangan untuk mengambil setiap nilai (nilai dalam getValuesfromObject) dan mengembalikan fungsi Boolean () untuk mengetahui apakah ekspresi ("text1" adalah nilai dalam larik perulangan) benar.
if( myObj.hasOwnProperty('key') && myObj['key'] === value ){
...
}
Ini harus menjadi pemeriksaan sederhana.
Contoh 1
var myObj = {"a": "test1"}
if(myObj.a == "test1") {
alert("test1 exists!");
}
var a = {};<br/>'hasOwnProperty' in a' //true
Object.values(obj).includes('test1');