Tôi có một đối tượng trong JavaScript:
var obj = {
"a": "test1",
"b": "test2"
}
Làm cách nào để kiểm tra rằng test1 tồn tại trong đối tượng dưới dạng một giá trị?
Tôi có một đối tượng trong JavaScript:
var obj = {
"a": "test1",
"b": "test2"
}
Làm cách nào để kiểm tra rằng test1 tồn tại trong đối tượng dưới dạng một giá trị?
Câu trả lời:
Bạn có thể biến các giá trị của một Đối tượng thành một mảng và kiểm tra xem một chuỗi có tồn tại hay không. Nó giả định rằng Đối tượng không được lồng vào nhau và chuỗi là một đối sánh chính xác:
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')) { ... }
Thử:
var obj = {
"a": "test1",
"b": "test2"
};
Object.keys(obj).forEach(function(key) {
if (obj[key] == 'test1') {
alert('exists');
}
});
Hoặc là
var obj = {
"a": "test1",
"b": "test2"
};
var found = Object.keys(obj).filter(function(key) {
return obj[key] === 'test1';
});
if (found.length) {
alert('exists');
}
Điều này sẽ không hoạt động cho NaNvà -0cho các giá trị đó. Bạn có thể sử dụng (thay vì ===) những gì mới trong ECMAScript 6:
Object.is(obj[key], value);
Với các trình duyệt hiện đại, bạn cũng có thể sử dụng:
var obj = {
"a": "test1",
"b": "test2"
};
if (Object.values(obj).includes('test1')) {
alert('exists');
}
Sử dụng một for...invòng lặp:
for (let k in obj) {
if (obj[k] === "test1") {
return true;
}
}
ES6 ngắn nhất + một lớp lót:
let exists = Object.values(obj).includes("test1");
Bạn có thể sử dụng Object.values () :
Các
Object.values()phương thức trả về một mảng các giá trị tài sản đếm được riêng một đối tượng nhất định, trong thứ tự như được cung cấp bởi mộtfor...invòng lặp (sự khác biệt là có một cho-in liệt kê vòng lặp tính trong chuỗi ban đầu cũng).
và sau đó sử dụng phương thức indexOf () :
Các
indexOf()phương thức trả về chỉ số đầu tiên mà tại đó một yếu tố nhất định có thể được tìm thấy trong mảng, hoặc -1 nếu nó không phải là hiện tại.
Ví dụ:
Object.values(obj).indexOf("test`") >= 0
Dưới đây là một ví dụ chi tiết hơn:
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
Tôi đã thực hiện một bài kiểm tra với tất cả các ví dụ này và tôi đã chạy nó trong Node.js v8.11.2 . Hãy xem đây là hướng dẫn để chọn ra sự lựa chọn tốt nhất của bạn.
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")
Đầu ra trên máy chủ của tôi
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
Đối với một lớp lót, tôi sẽ nói:
exist = Object.values(obj).includes("test1");
console.log(exist);
Bạn có thể thử điều này:
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"); }));
bạn có thể thử cái này
var obj = {
"a": "test1",
"b": "test2"
};
const findSpecificStr = (obj, str) => {
return Object.values(obj).includes(str);
}
findSpecificStr(obj, 'test1');
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"
};
Hàm được gọi là:
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")
}
Phương thức Object.values () trả về một mảng (được gán cho getValuesOfObject) chứa các giá trị thuộc tính có thể liệt kê của đối tượng đã cho (obj). Mảng đã được lặp lại bằng cách sử dụng forvòng lặp để truy xuất từng giá trị (các giá trị trong getValuesfromObject) và trả về một hàm Boolean () để tìm hiểu xem biểu thức ("text1" có phải là một giá trị trong mảng lặp) không.
if( myObj.hasOwnProperty('key') && myObj['key'] === value ){
...
}
Câu trả lời đơn giản cho điều này được đưa ra dưới đây.
Điều này đang hoạt động vì mọi loại JavaScript đều có thuộc tính “constructor” trên nguyên mẫu của nó ”.
Đây sẽ là một kiểm tra đơn giản.
ví dụ 1
var myObj = {"a": "test1"}
if(myObj.a == "test1") {
alert("test1 exists!");
}
var a = {};<br/>'hasOwnProperty' in a' //true
Object.values(obj).includes('test1');