मेरे पास जावास्क्रिप्ट में एक वस्तु है:
var obj = {
"a": "test1",
"b": "test2"
}
मैं कैसे जांचता हूं कि मान के रूप में test1 वस्तु में मौजूद है?
मेरे पास जावास्क्रिप्ट में एक वस्तु है:
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
if(Object.values(obj).includes('test1')) { ... }
प्रयत्न:
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। आप ===ECMAScript 6 में नया क्या है (इसके बजाय ) का उपयोग कर सकते हैं :
Object.is(obj[key], value);
आधुनिक ब्राउज़रों के साथ आप भी उपयोग कर सकते हैं:
var obj = {
"a": "test1",
"b": "test2"
};
if (Object.values(obj).includes('test1')) {
alert('exists');
}
एक for...inलूप का उपयोग करें :
for (let k in obj) {
if (obj[k] === "test1") {
return true;
}
}
सबसे छोटा ES6 + एक लाइनर:
let exists = Object.values(obj).includes("test1");
आप Object.values () का उपयोग कर सकते हैं :
यह
Object.values()विधि किसी दिए गए ऑब्जेक्ट के अपने असंख्य गुण मानों की एक सरणी देता है, उसी क्रम में जो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
मैंने इन सभी उदाहरणों के साथ एक परीक्षण किया, और मैंने इसे Node.js 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")
मेरे सर्वर पर आउटपुट
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
एक-लाइनर के लिए, मैं कहूंगा:
exist = Object.values(obj).includes("test1");
console.log(exist);
आप यह कोशिश कर सकते हैं:
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"
};
कहा जाता है:
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")
}
Object.values () विधि दिए गए ऑब्जेक्ट (obj) के पास एक बहुत ही गुण वाली संपत्ति मानों के साथ एक सरणी (getValuesOfObject को असाइन किया गया) लौटा दी गई है। सरणी को forमान (getValuesfromObject में मान) को पुनः प्राप्त करने के लिए लूप का उपयोग करके पुनरावृत्त किया गया था और बूलियन () फ़ंक्शन को यह पता लगाने के लिए देता है कि क्या अभिव्यक्ति ("text1" लूपिंग सरणी में एक मान है) सही है।
if( myObj.hasOwnProperty('key') && myObj['key'] === value ){
...
}
इसका सरल उत्तर नीचे दिया गया है।
यह काम कर रहा है क्योंकि प्रत्येक जावास्क्रिप्ट प्रकार के पास " प्रोटोटाइप " संपत्ति है जो उस पर प्रोटोटाइप है ।
Object.values(obj).includes('test1');