জাভাস্ক্রিপ্ট ব্যবহার করে কোনও বস্তুর মধ্যে কোনও মান বিদ্যমান কিনা তা পরীক্ষা করে দেখুন


114

জাভাস্ক্রিপ্টে আমার একটি অবজেক্ট রয়েছে:

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

আমি কীভাবে পরীক্ষণ করব যে টেস্ট 1 মান হিসাবে বস্তুটিতে বিদ্যমান?


19
বাহ .. যারা এটিকে সদৃশ হিসাবে চিহ্নিত করেছে তারা হয় পাগল বা ইংরেজি পড়তে জানে না। যাইহোক, এস with সহ, আপনি এমন কিছু করুন:Object.values(obj).includes('test1');
মালি

4
এখানে নকল (কী জন্য চেক) রেফার করা আছে: stackoverflow.com/questions/1098040/…
স্যামুয়েল -স্লুন্ড

উত্তর:


131

আপনি কোনও অবজেক্টের মানগুলিকে একটি অ্যারেতে পরিণত করতে পারেন এবং পরীক্ষা করতে পারেন যে একটি স্ট্রিং উপস্থিত রয়েছে। এটি ধরে নিয়েছে যে অবজেক্টটি নেস্টেড নয় এবং স্ট্রিংটি হুবহু মিল:

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/ উল্লেখ / গ্লোবাল_অবজেক্টস / অবজেক্ট / মূল্য


8
এটি ইকমা ২০১7 এর অংশ, এটি এখনও বেশিরভাগ ব্যবহারের জন্য উপলভ্য নয় :(
রান হাল্পিন

4
আইই ১১ এবং এজতে সমর্থিত নয়, নীচে বর্ণিত
হিসাবে..ইন লুপটির

25
কিছুটা কম if(Object.values(obj).includes('test1')) { ... }
ভার্বোজ

44

আপনি অ্যারে পদ্ধতিটি ব্যবহার করতে পারেন .some:

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

কম ক্রিয়াপদ সহ, এর সাথে Object.values: `` `var বিদ্যমান = অবজেক্ট.ভ্যালু (অবজেক্ট)। কিছু (ফাংশন (কে) {রিটার্ন কে ===" টেস্ট 1 ";}); `` `
ফরেষ্টো

37

চেষ্টা করুন:

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


26

একটি for...inলুপ ব্যবহার করুন :

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

@ গ্রেগর এটি পরের মানটি গ্রহণ করার সাথে সাথে 'কে' আবার সংজ্ঞায়িত হিসাবে বিবেচ্য নয়।
বিক্রান্ত

4
অত্যন্ত আন্ডাররেটেড উত্তর, অন্য যে কোনও পদ্ধতির চেয়ে এই একের পারফরম্যান্স
পাইরেটঅ্যাপ

24

সবচেয়ে কম ES6 + একটি লাইনার:

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

4
যদিও আইই সমর্থন করে না অন্তর্ভুক্ত করুন () অন্তর্ভুক্ত (), সুতরাং এটি কেবল নোডের সাথে সার্ভার সাইডটি ব্যবহার করুন বা আপনি যদি কেবল আইই সম্পর্কে চিন্তা করেন না।
জোও পিমেন্টেল ফেরেরি

19

আপনি অবজেক্ট.ভ্যালু () ব্যবহার করতে পারেন :

Object.values()পদ্ধতি একটি প্রদত্ত বস্তু নিজস্ব গণনীয় সম্পত্তি মূল্যবোধের একটি বিন্যাস দেখায় একটি যেমন দেওয়া হয়েছিল তেমন একই আদেশ, for...in(পার্থক্য হচ্ছে যে একটি জন্য-ইন প্রোটোটাইপ চেন লুপ উল্লেখ বৈশিষ্ট্য হিসাবে ভাল) লুপ।

এবং তারপরে সূচিপত্র () পদ্ধতিটি ব্যবহার করুন :

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

আমি এই সমস্ত উদাহরণ দিয়ে একটি পরীক্ষা করেছি, এবং আমি নোড.জেএস 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
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");

এই সমাধানটি প্রয়োগ করার সময় আপনি অন্যান্য লাইব্রেরি ব্যবহার করেছেন?
শেরউইন আবলাñা দাপিতো

0
var obj = {"a": "test1", "b": "test2"};
var getValuesOfObject = Object.values(obj)
for(index = 0; index < getValuesOfObject.length; index++){
    return Boolean(getValuesOfObject[index] === "test1")
}

অবজেক্ট.ভালিউস () পদ্ধতি প্রদত্ত বস্তুর (অবজেক্ট) নিজস্ব অগণিত সম্পত্তি মান সম্বলিত একটি অ্যারে (getValuesOfObject বরাদ্দ করা) প্রদান করে। অ্যারে forপ্রতিটি মান (getValuesfromObject এর মান) পুনরুদ্ধার করতে লুপটি ব্যবহার করে পুনরাবৃত্তি হয়েছিল এবং এক্সপ্রেশনটি ("পাঠ্য 1" লুপিং অ্যারেতে একটি মান কিনা) তা খুঁজে বের করার জন্য একটি বুলিয়ান () ফাংশন প্রদান করে।


0

আপনি এটি চেষ্টা করতে পারেন

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

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

findSpecificStr(obj, 'test1');


-4

এর সহজ উত্তর নীচে দেওয়া হল।

এটি কাজ করছে কারণ প্রতিটি জাভাস্ক্রিপ্ট টাইপের প্রোটোটাইপে একটি "কনস্ট্রাক্টর" সম্পত্তি রয়েছে ।

let array = []
array.constructor === Array
// => true


let data = {}
data.constructor === Object
// => true

4
দয়া করে একটি উত্তর হিসাবে আপনার উত্তরটিতে আপনার কোড যুক্ত করুন এবং কোনও চিত্র নয়, এছাড়াও দেখুন আমি কীভাবে মার্কডাউন বা এইচটিএমএল ব্যবহার করে আমার পোস্টগুলি ফর্ম্যাট করব?
ভাসিল ভেলিচকভ

ছবিতে কোডটি পাঠ্যে প্রতিলিপি করুন। আগাম ধন্যবাদ.
পিটার মর্টেনসেন

-7

এটি একটি সহজ চেক করা উচিত।

উদাহরণ 1

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

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

4
এই মানটি নয় কীটি পরীক্ষা করুন।
jcubic

4
থিং প্রোটোটাইপ চেইনকে অতিক্রম করবে এবং সম্ভবত প্রত্যাশার মতো কাজ করবে! উদাহরণস্বরূপ, var a = {};<br/>'hasOwnProperty' in a' //true
নোকটিসডার্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.