जावास्क्रिप्ट का उपयोग करके किसी ऑब्जेक्ट में मान मौजूद है या नहीं, इसकी जांच कैसे करें


103

मेरे पास जावास्क्रिप्ट में एक वस्तु है:

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

मैं कैसे जांचता हूं कि मान के रूप में test1 वस्तु में मौजूद है?


16
वाह..तो इसे नकली के रूप में चिह्नित करने वाले या तो पागल हैं या अंग्रेजी पढ़ना नहीं जानते हैं। वैसे भी, es7 के साथ, आप कुछ ऐसा करते हैं:Object.values(obj).includes('test1');
माली नईम

2
यहाँ डुप्लिकेट नहीं है (कुंजी की जांच करें) संदर्भित है: stackoverflow.com/questions/1098040/…
सैमुअल Samslund

जवाबों:


126

आप किसी ऑब्जेक्ट के मानों को एक सरणी में बदल सकते हैं और परीक्षण कर सकते हैं कि एक स्ट्रिंग मौजूद है। यह मानता है कि ऑब्जेक्ट नेस्टेड नहीं है और स्ट्रिंग एक सटीक मैच है:

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


8
यह Ecma2017 का एक हिस्सा है, यह अभी तक अधिकांश उपयोगों के लिए उपलब्ध नहीं है :(
रैन हैप्रिन

2
IE 11 और एज में समर्थित नहीं है, यह नीचे दिए गए रूप में
for..in

24
थोड़ा कम if(Object.values(obj).includes('test1')) { ... }
क्रिया

41

आप ऐरे विधि का उपयोग कर सकते हैं .some:

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

36

प्रयत्न:

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');
}


24

एक for...inलूप का उपयोग करें :

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

@ के रूप में यह 'k' के रूप में कोई फर्क नहीं पड़ता जब यह अगले मान लेता है फिर से परिभाषित किया गया है।
विक्रांत

4
बेहद कम जवाब, इस पर प्रदर्शन किसी भी अन्य विधि से बेहतर है
PirateApp

2
इससे सहमत हूं। बहुत ही कम जवाब मिला ...
समाकैब

22

सबसे छोटा ES6 + एक लाइनर:

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

1
हालांकि मन यह है कि IE .includes () का समर्थन नहीं करता है, इसलिए इसे केवल नोड के साथ सर्वर साइड का उपयोग करें या यदि आप केवल IE के बारे में परवाह नहीं करते हैं।
जोआओ पिमेंटेल फेरेरा

19

आप 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


8

मैंने इन सभी उदाहरणों के साथ एक परीक्षण किया, और मैंने इसे 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


2

आप यह कोशिश कर सकते हैं:

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"); }));

0

आप इसे आज़मा सकते हैं

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

const findSpecificStr = (obj, str) => {
  return Object.values(obj).includes(str);
}

findSpecificStr(obj, 'test1');

-1
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");

क्या आपने इस समाधान को लागू करते समय अन्य पुस्तकालयों का उपयोग किया था?
शेरविन अबलाना डापिटो

-2
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" लूपिंग सरणी में एक मान है) सही है।



-4

इसका सरल उत्तर नीचे दिया गया है।

यह काम कर रहा है क्योंकि प्रत्येक जावास्क्रिप्ट प्रकार के पास " प्रोटोटाइप " संपत्ति है जो उस पर प्रोटोटाइप है

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें


4
कृपया एक पाठ के रूप में अपने उत्तर को अपने कोड में जोड़ें और एक छवि के रूप में नहीं, यह भी देखें कि मैं मार्कडाउन या एचटीएमएल का उपयोग करके अपने पदों को कैसे प्रारूपित करूं?
वासिल वेलिचकोव

कृपया छवि में कोड को पाठ में लिखें। अग्रिम में धन्यवाद।
पीटर मोर्टेंसन

-7

यह एक साधारण जाँच होनी चाहिए।

उदाहरण 1

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

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

1
यह कुंजी नहीं मान की जाँच करें।
जकुबिक

1
थॉट प्रोटोटाइप श्रृंखला को आगे var a = {};'hasOwnProperty' in a' //true
बढ़ाएगा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.