জাভাস্ক্রিপ্ট অবজেক্টে এর মান দ্বারা কী কীভাবে পাবেন?


386

আমার কাছে বেশ সরল জাভাস্ক্রিপ্ট অবজেক্ট রয়েছে, যা আমি সহযোগী অ্যারে হিসাবে ব্যবহার করি। একটি সাধারণ ক্রিয়াকলাপ কি আমাকে কোনও মানটির কীটি আনতে দেয়, বা আমাকে কী জিনিসটি পুনরুক্ত করে ম্যানুয়ালি খুঁজে বের করতে হবে?


এটি করার মতো কোনও মানক ফাংশন নেই। যদি ম্যাপিংটি সত্যিকার অর্থে দ্বি নির্দেশমূলক হয় তবে "ফ্লিপড" মানচিত্র এবং সূচকটি নির্মাণ করা তুচ্ছ। অন্যথায় একটি সাধারণ সম্পত্তি-পুনরাবৃত্তিকারী (সম্ভবত একটি হ'ল প্রচলিত গৌড় সহ, সম্ভবত) এবং কোনও ফাংশনের অভ্যন্তরে লুকানো একটি প্রাথমিক-প্রত্যাবর্তন কেবল দুর্দান্তভাবে সম্পাদন করে ...

কোনও বস্তুর একাধিক কী দ্বারা রেফারেন্স দেওয়া থাকলে কীভাবে এই কাজ করা যেতে পারে? var o = []; var map = {first: o, second: o}। কি find_key(o)ফিরে আসবে?
গ্যারেথ

3
কিছু যায় আসে না;) আমি কেবল এটি অনন্য কী-মান-জোড় যুক্ত অ্যারের জন্য ব্যবহার করার ইচ্ছা নিয়েছিলাম।
আরিক


আমি পুনরাবৃত্তি স্ট্যাকওভারফ্লো . com/ a/ 36705765/696535 ছাড়াই একটি সংস্করণ তৈরি করেছি । Jsfiddle- এর সমস্ত প্রস্তাবিত সমাধানগুলি পরীক্ষা করা আকর্ষণীয় হবে
পাভেল

উত্তর:


90

সঙ্গে Underscore.js গ্রন্থাগার:

var hash = {
  foo: 1,
  bar: 2
};

(_.invert(hash))[1]; // => 'foo'

380
@ জর্জেজেম্পি সবাই সাধারণ কী দেখার জন্য 5 কেবি লাইব্রেরি লোড করতে চায় না;)
tckmn

4
যে কোনও সমাধানের জন্য সন্ধানের জন্য কেবল এফওয়াইআই যা আপনাকে মানগুলির সাথে মেলে এমন সমস্ত কীগুলি দেয়: এটি কার্যকর হবে না।
ব্রেট

2
আন্ডারস্কোর কীগুলিও কাজ করবে। underscorejs.org/#keys _.keys ({এক: 1, দুই: 2, তিন: 3}); => ["এক", "দুই", "তিন"]
থাদ্দিউস অ্যালবার্স

1
_.invers কাজ করে না যেখানে মানগুলিতে ডিফল্ট স্ট্রিং সিরিয়ালাইজেশন সংঘর্ষের সাথে অবজেক্টগুলিকে অন্তর্ভুক্ত করে। আপনি এই জঘন্য ব্যবহার করতে পারেন:_.chain(hash).pairs().findWhere({1: 1}).value()[0]
ড্যানহর্নার

3
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত নয়, এটি এমন একটি লাইব্রেরির মাধ্যমে একটি সমাধানের প্রস্তাব দেয় যা বর্তমান কোড কাঠামোতে পরিবর্তন আনতে বাধ্য করে
মাত্তো

590
function getKeyByValue(object, value) {
  return Object.keys(object).find(key => object[key] === value);
}

ES6, কোনও প্রোটোটাইপ রূপান্তর বা বাহ্যিক গ্রন্থাগার নেই।

উদাহরণ,

function getKeyByValue(object, value) {
  return Object.keys(object).find(key => object[key] === value);
}


const map = {"first" : "1", "second" : "2"};
console.log(getKeyByValue(map,"2"));


8
ঠিক আছে, আপনি IE11 :-) সমর্থন না করলে সত্যই পরিষ্কার করুন আপনার যদি একটি পলিফিল দরকার হয়
চেক্সপির

4
বাস্তবায়নের উপর নির্ভর করে, মূল সেটটি কার্যকর করার পরে এটি সম্ভবত ও (এন) স্থান নেবে keys()
ডেভিড এহরমান

2
পরিষ্কার কিন্তু ধীর।
পরিচালনসাধ্য

4
যদি একাধিক কীগুলিতে function getKeyByValue(object, value) { return Object.keys(object).filter(key => object[key] === value); }
সন্ধানের

হাঃ হাঃ হাঃ. এটি ধীর নয়, এটি ও (এন) যা সম্ভবত সম্ভাব্যতম সেরা রানটাইম।
বেন ওয়াইনরাইট

179

কোনও মানক পদ্ধতি উপলব্ধ নেই। আপনাকে পুনরাবৃত্তি করতে হবে এবং আপনি একটি সহজ সহায়ক তৈরি করতে পারেন:

Object.prototype.getKeyByValue = function( value ) {
    for( var prop in this ) {
        if( this.hasOwnProperty( prop ) ) {
             if( this[ prop ] === value )
                 return prop;
        }
    }
}

var test = {
   key1: 42,
   key2: 'foo'
};

test.getKeyByValue( 42 );  // returns 'key1'

সাবধানতার একটি শব্দ : উপরের কাজটি করা হলেও, কোনও হোস্ট বা নেটিভ অবজেক্টকে প্রসারিত করা সাধারণত এটি একটি খারাপ ধারণা .prototype। আমি এখানে এটি করেছি কারণ এটি সমস্যার সাথে খুব ভাল ফিট করে। যাইহোক, আপনার সম্ভবত এই ফাংশনটি এর বাইরে ব্যবহার করা উচিত .prototypeএবং এর পরিবর্তে অবজেক্টটি এতে প্রবেশ করা উচিত।


2
আসলে এটি ঠিক আছে যদি আপনি এই জাতীয় জিনিসগুলি জানেন যে ইন-ইন লুপটি সম্পত্তি শৃঙ্খলে নেমে যায় যার অর্থ "for (ob key in ob)" আপনাকে "getKeyByValue" কে "কী" হিসাবে কোনও পর্যায়ে দেবে।

ওহ মানুষ আমি মানতে পারি যে মানটির অস্তিত্ব না থাকলে কীভাবে এই চৌর্যতার সাথে অনির্ধারিতভাবে ফিরে আসে। সাবাশ. এছাড়াও, মাত্র একটি আগ্রহের বিষয়, এটি ও (এন) সম্পাদন করবে সুতরাং বস্তুটির যদি এক টন বৈশিষ্ট্য থাকে (বড় শহরের লোকের তালিকা এবং তাদের ঠিকানাগুলির মতো), আপনি সম্ভবত আরও দক্ষ অনুসন্ধান চান। মান এবং বাইনারি অনুসন্ধান বাছাই হতে পারে? অঁ্যা?
কর্বিন

অনেক ধন্যবাদ, আমি যখন খারাপ ধারণাটি দেখেছি তখন আমি অবাক হয়েছি কেন আমি এর মাধ্যমে অনুসন্ধান করেছি এবং এই উত্তর বর্ধন এবং বিস্তৃত পড়ার জন্য এখানে যুক্ত করেছি added stackoverflow.com/questions/3085240/...
simongcc

1
@ জেঞ্জি এটি নট === নয়, এটি ==। আপনার কোড === এর সাথে কাজ করে না। এটি অপরিবর্তিত
ডেক্সটার

আমি মনে করি এটিকে স্ট্রিংয়ে রূপান্তর করা ধরণের ত্রুটিগুলি ঠিক করা এবং .toString()পছন্দ obj[ key ].toString()করতে চাইলে মানকে সংশোধন করা ভাল ...
CrandellWS

129

যেমনটি বলা হয়েছে, পুনরাবৃত্তি প্রয়োজন। উদাহরণস্বরূপ, আধুনিক ব্রাউজারে আপনার এটি থাকতে পারে:

var key = Object.keys(obj).filter(function(key) {return obj[key] === value})[0];

কোথায় value আপনি যে মানটি সন্ধান করছেন তা অন্তর্ভুক্ত রয়েছে। বলেছিল যে, আমি সম্ভবত একটি লুপ ব্যবহার করব।

অন্যথায় আপনি একটি যথাযথ "হ্যাশম্যাপ" অবজেক্ট ব্যবহার করতে পারেন - জেএসের চারপাশে বেশ কয়েকটি বাস্তবায়ন রয়েছে - বা আপনার নিজের দ্বারা প্রয়োগ করা যেতে পারে।

2018 আপডেট করুন

ছয় বছর কেটে গেছে, তবে আমি এখানে কিছুটা ভোট পেয়েছি, তাই আমি আরও আধুনিক সমাধানের মতো বোধ করি - আধুনিক ব্রাউজার / পরিবেশের জন্য - উত্তরটিতে নিজেই উল্লেখ করা উচিত এবং কেবল মন্তব্যে নয়:

const key = Object.keys(obj).find(key => obj[key] === value);

অবশ্যই এটি একটি ফাংশন হতে পারে:

const getKeyByValue = (obj, value) => 
        Object.keys(obj).find(key => obj[key] === value);

18
ES6:Object.keys(obj).or(o=>o[key] === value)
বেনিয়ামিন গ্রুইনবাউম

দুর্ভাগ্যক্রমে তীর ফাংশনটি এখনও কোনও "আধুনিক" ব্রাউজার নয়, তাই এই মুহুর্তে এটি কিছুটা অকেজো - আমি এটি ফায়ারফক্স নাইটলিতে জেটপ্যাকটিতে ব্যবহার করছি, এটি ফায়ারফক্স ২২ এ থাকবে Any যাইহোক, আমি কোনও orঅ্যারের সম্পর্কে অবগত নই পদ্ধতি, এবং এটি এখানে আমার উদ্দেশ্যটি স্পষ্ট নয়: আমি কিছু অতিরিক্ত বিশদ প্রশংসা করব! :)
ZER0

1
তীর হিসাবে, এটি আসছে এবং আমি এটির জন্য অপেক্ষা করছি :) orঅবশ্যই! এটি সম্প্রতি মূল্যায়ন এবং স্বীকৃত হয়েছিল (আমি মনে করি না যে কেউ এখনও এটি প্রয়োগ করে)। এটি কী করে তা হ'ল একটি অ্যারেটির প্রথম উপাদানটিকে একটি শিকারের সাথে মেলে এবং এটি ফিরে আসে। সুতরাং [1,2,3,4].or(x=>x>2)ফিরে আসবে 3এবং [1,2,3,4,5].or(x=>x<3)ফিরে হবে 1। সি # এর ফার্স্টআরডিফল্টের মতো কিছু :)
বেনিয়ামিন

হ্যাঁ, তীর আসছে তবে এটি ব্যাপকভাবে ব্যবহৃত হতে হবে - যতক্ষণ না আমি করি, কারও নির্দিষ্ট ইঞ্জিনে কাজ করা। আমি ES6 এর জন্য নতুন প্রস্তাব সম্পর্কে সচেতন ছিলাম না, ভেবেছিলাম বেশ বন্ধ ছিল: orপদ্ধতিটি সম্পর্কে আপনার কোনও লিঙ্ক আছে ? আপনি যা উল্লেখ করেছেন তা থেকে মনে হচ্ছে এটি প্রটেক্টের সাথে মেলে এমন আইটেমটি ফিরে আসে "বা" অ্যারে নিজেই?
ZER0

1
@ sg552 যেমনটি পরে উল্লেখ করা orহয়েছিল, নামকরণ করা হয়েছিল। আমি এখন মনে হয় আপনার কাছে ব্যবহার করা উচিত খোঁজ
ZER0

42

লোডাস পথ https://lodash.com/docs#findKey

var users = {
  'barney':  { 'age': 36, 'active': true },
  'fred':    { 'age': 40, 'active': false },
  'pebbles': { 'age': 1,  'active': true }
};

_.findKey(users, { 'age': 1, 'active': true });
// → 'pebbles'


লোড্যাশ স্পষ্টতই এই সমস্যাটির সেরা সমাধান। আন্ডারস্কোর পথের চেয়েও ভাল find
আরিক

4
এফওয়াইআই, "আন্ডারস্কোর ওয়ে": _.findKey(users, { 'age': 1, 'active': true });... এটি একই
ক্রেগমিকেলমার্টিন

যদি অ্যারেটি আপনার ব্যবহার করা প্রয়োজন এমন মান হয়: - আসুন = {a: [1, 2], বি: [3, 4], সি: [5, 6]। _.ফিন্ডকি (আপত্তি, ফাংশন (ভাল)) { রিটার্ন _.isEqual (ভাল, [5, 6]);});
ashishyadaveee11

8
যদি আপনার মানগুলি স্ট্রিং বা পূর্ণসংখ্যার মতো সহজ হয় তবে প্রত্যাশার বিপরীতে এটি কাজ করবে না। উদাহরণস্বরূপ, _.find_key({a: "A", b:"B"}, "B"})রিটার্নগুলি এখানেundefined যেমন বলা হয়েছে আপনাকে করতে হবে _.find_key({a: "A", b:"B"}, _.partial(_.isEqual,"B")})
ryan2johnson9

1
@ ryan2johnson9 লোদাশের সাথে আমার সমস্যা problem কিছু ফাংশন বুঝতে আমার খুব কষ্ট হচ্ছে (সম্ভবত আমিই একমাত্র)) তবে যাইহোক ধন্যবাদ, এটি কার্যকর। আমি আরেকটি, সংক্ষিপ্ত সমাধান পেয়েছি। এটি বৃহত্তর অবজেক্টগুলিতে অত্যধিক চাপের কারণ হয়ে থাকে তাই এটির সাথে সাবধানতা অবলম্বন করুন। _.invert(haystack)[needle]
এম্পি

33
function extractKeyValue(obj, value) {
    return Object.keys(obj)[Object.values(obj).indexOf(value)];
}

কী নামটি বের করার জন্য ক্লোজার সংকলনের জন্য তৈরি যা সংকলনের পরে অজানা

আরও সেক্সি সংস্করণ কিন্তু ভবিষ্যতের Object.entriesফাংশন ব্যবহার করে

function objectKeyByValue (obj, val) {
  return Object.entries(obj).find(i => i[1] === val);
}

7
আমি মনে করি এটি 2017+ এর জন্য সেরা এটি যেহেতু এটি সরল জাভাস্ক্রিপ্ট ব্যবহার করে।
ব্রেইনব্যাগ

আপনার যদি দুটি বা ততোধিক সংখ্যার সমান মান থাকে তবে কাজ করছে বলে মনে হচ্ছে না
জুसिकওয়াই_বুরিটো

@ সামুয়েলচেন এটি ঠিক আছে তবে এটি যদি কাজ করে তবে এর অর্থ একটি অ্যারের প্রয়োজন হয়। পরিবর্তে যেখানে Object.entries(obj).find(i => i[1] === val);ব্যবহার করবেনfilterObject.entries(obj).filter(i => i[1] === val);
পাভেল

24

ES6 + ওয়ান লাইনার

let key = Object.keys(obj).find(k=>obj[k]===value);

মান সহ সমস্ত কীগুলি ফেরত দিন:

let keys = Object.keys(obj).filter(k=>obj[k]===value);

1
কোনও নির্ভরতা না থাকায় গ্রহণযোগ্য উত্তর হওয়া উচিত।
অ্যান্ড্রু শুল্টজ

22

আমি এই ফাংশনটি ব্যবহার করি:

Object.prototype.getKey = function(value){
  for(var key in this){
    if(this[key] == value){
      return key;
    }
  }
  return null;
};

ব্যবহার:

// ISO 639: 2-letter codes
var languageCodes = {
  DA: 'Danish',
  DE: 'German',
  DZ: 'Bhutani',
  EL: 'Greek',
  EN: 'English',
  EO: 'Esperanto',
  ES: 'Spanish'
};

var key = languageCodes.getKey('Greek');
console.log(key); // EL

10
+1 ঝরঝরে সমাধান। তবে আমার একটি প্রশ্ন আছে: আপনার কি সবসময় চেক করা উচিত নয় obj.hasOwnProperty(key)বা এ ক্ষেত্রে এটি অপ্রয়োজনীয়?
ভি-লাইট

5
অবজেক্ট প্রোটোটাইপকে রূপান্তর করা খারাপ অভ্যাস: স্ট্যাকওভারফ্লো
জন কুপস

18

অ-পুনরাবৃত্তিযোগ্য সমাধান

প্রধান ফাংশন:

var keyByValue = function(value) {

    var kArray = Object.keys(greetings);        // Creating array of keys
    var vArray = Object.values(greetings);      // Creating array of values
    var vIndex = vArray.indexOf(value);         // Finding value index 

    return kArray[vIndex];                      // Returning key by value index
}

কী এবং মান সহ বস্তু:

var greetings = {
    english   : "hello",
    ukranian  : "привіт"
};

টেস্ট:

keyByValue("привіт");
// => "ukranian"

সহজ: Object.keys(greetings )[Object.values(greetings ).indexOf('привіт')]
shutman

16

আপনার প্রোটোটাইপ পরিষ্কার রাখুন ।

function val2key(val,array){
    for (var key in array) {
        if(array[key] == val){
            return key;
        }
    }
 return false;
}

উদাহরণ:

var map = {"first" : 1, "second" : 2};
var key = val2key(2,map); /*returns "second"*/

15

আপনার সাথে কাজ করেন, তাহলে আন্ডারস্কোর বা Lodash গ্রন্থাগার, আপনি ব্যবহার করতে পারেন _.findKey ফাংশন:

var users = {
  'barney':  { 'age': 36, 'active': true },
  'fred':    { 'age': 40, 'active': false },
  'pebbles': { 'age': 1,  'active': true }
};

_.findKey(users, function(o) { return o.age < 40; });
// => 'barney' (iteration order is not guaranteed)

// The `_.matches` iteratee shorthand.
_.findKey(users, { 'age': 1, 'active': true });
// => 'pebbles'

// The `_.matchesProperty` iteratee shorthand.
_.findKey(users, ['active', false]);
// => 'fred'

// The `_.property` iteratee shorthand.
_.findKey(users, 'active');
// => 'barney'

13

আমি বিম্যাপ লাইব্রেরি তৈরি করেছি ( https://github.com/alethes/bimap ) যা একটি শক্তিশালী, নমনীয় এবং দক্ষ জাভাস্ক্রিপ্ট দ্বিদ্বায়ক ম্যাপ ইন্টারফেস প্রয়োগ করে। এটির কোনও নির্ভরতা নেই এবং সার্ভার-সাইডে ( নোড.জেজে আপনি এটি ইনস্টল করতে পারেন npm install bimap) এবং ব্রাউজারে ( lib / bimap.js এর সাথে লিঙ্ক রেখে ) উভয়ই ব্যবহারযোগ্য ) ।

বেসিক ক্রিয়াকলাপগুলি সত্যই সহজ:

var bimap = new BiMap;
bimap.push("k", "v");
bimap.key("k") // => "v"
bimap.val("v") // => "k"

bimap.push("UK", ["London", "Manchester"]);
bimap.key("UK"); // => ["London", "Manchester"]
bimap.val("London"); // => "UK"
bimap.val("Manchester"); // => "UK"

মূল-মান মানচিত্রের পুনরুদ্ধার উভয় দিকের ক্ষেত্রে সমান দ্রুত। হুডের অধীনে কোনও ব্যয়বহুল অবজেক্ট / অ্যারে ট্র্যাভারসাল নেই তাই ডেটা আকারের নির্বিশেষে গড় অ্যাক্সেসের সময় স্থির থাকে।


একমাত্র সমাধানের জন্য যা পুনরাবৃত্তি প্রয়োজন হয় না (হয় সমাধানে নিজেই, মানক গ্রন্থাগার বা অন্য কোনও গ্রন্থাগার)।
স্কট রুডিগার


5

মানগুলি যেহেতু অনন্য, তাই অতিরিক্ত কীগুলির সেট হিসাবে মানগুলি যুক্ত করা সম্ভব। এটি নিম্নলিখিত শর্টকাট দিয়ে করা যেতে পারে।

var foo = {};
foo[foo.apple = "an apple"] = "apple";
foo[foo.pear = "a pear"] = "pear";

এটি কী বা মানটির মাধ্যমে পুনরুদ্ধারের অনুমতি দেবে:

var key = "apple";
var value = "an apple";

console.log(foo[value]); // "apple"
console.log(foo[key]); // "an apple"

এটি ধরে নেওয়া যায় যে কী এবং মানগুলির মধ্যে কোনও সাধারণ উপাদান নেই।


সমস্ত সমাধান ব্রাউজ করে আমি এইটি দিয়ে গেলাম। খুব স্বজ্ঞাত।
নেহেম

1
একমাত্র সমাধানের জন্য যা পুনরাবৃত্তি প্রয়োজন হয় না (হয় সমাধানে নিজেই, মানক গ্রন্থাগার বা অন্য কোনও গ্রন্থাগার)।
স্কট রুডিগার

ওপি বলেছিল যে কী / মান জোড়গুলি সমস্তই অনন্য ছিল তাই এই স্বল্প প্রযুক্তির উত্তরটি কেবল দুর্দান্ত! ভাল হয়েছে;)
কাস্টমমন্ডার

4

দেওয়া input={"a":"x", "b":"y", "c":"x"}...

  • প্রথম মানটি ব্যবহার করতে (যেমন output={"x":"a","y":"b"}):

input = {
  "a": "x",
  "b": "y",
  "c": "x"
}
output = Object.keys(input).reduceRight(function(accum, key, i) {
  accum[input[key]] = key;
  return accum;
}, {})
console.log(output)

  • শেষ মানটি ব্যবহার করতে (যেমন output={"x":"c","y":"b"}):

input = {
  "a": "x",
  "b": "y",
  "c": "x"
}
output = Object.keys(input).reduce(function(accum, key, i) {
  accum[input[key]] = key;
  return accum;
}, {})
console.log(output)

  • প্রতিটি মানের জন্য কীগুলির একটি অ্যারে পেতে (যেমন output={"x":["c","a"],"y":["b"]}):

input = {
  "a": "x",
  "b": "y",
  "c": "x"
}
output = Object.keys(input).reduceRight(function(accum, key, i) {
  accum[input[key]] = (accum[input[key]] || []).concat(key);
  return accum;
}, {})
console.log(output)


1
এটি অবশ্যই সেরা উত্তর, তবে কোনও প্রদত্ত বস্তুর জন্য কেবল কীটি ফিরিয়ে আনার জন্য আমি এটির রূপান্তর করার জন্য আমার মাথাটি স্ক্র্যাচ করে যাচ্ছিলাম, অর্থাত্ অ্যারের জন্য সূচিপত্রের মতো কার্যত সমতুল্য হয়ে উঠুন।
সৌহাইব বেসবাস

স্মৃতিশক্তি বাধা না থাকলে এবং আপনি বস্তুর মাধ্যমে বহুবার অনুসন্ধানের জন্য প্রচুর প্রসেসিং শক্তি ব্যয় করতে ইচ্ছুক না হন, কেবলমাত্র পরিবর্তনের উপরে উল্লিখিত "আউটপুট" সংরক্ষণ করুন এবং ফলাফলটি এখানে দেখুন ... যেমন output['x']। আপনি কি জিজ্ঞাসা করা হয় যে কি?
ফ্যাবিও বেলট্রামিনী

2

http://jsfiddle.net/rTazZ/2/

var a = new Array(); 
    a.push({"1": "apple", "2": "banana"}); 
    a.push({"3": "coconut", "4": "mango"});

    GetIndexByValue(a, "coconut");

    function GetIndexByValue(arrayName, value) {  
    var keyName = "";
    var index = -1;
    for (var i = 0; i < arrayName.length; i++) { 
       var obj = arrayName[i]; 
            for (var key in obj) {          
                if (obj[key] == value) { 
                    keyName = key; 
                    index = i;
                } 
            } 
        }
        //console.log(index); 
        return index;
    } 

@ Fr0zenFyr: লিঙ্ক অনুসরণ আপনি ভাল প্রশ্নের উত্তর দিতে পারেন - stackoverflow.com/questions/8423493/...
Atur

2

অথবা, আরও সহজ - আপনি কী ক্রমটি চান সেটির সাথে কীগুলি এবং মানগুলি দিয়ে একটি নতুন অবজেক্ট তৈরি করুন তারপরে সেই বস্তুর বিপরীতে সন্ধান করুন। উপরের প্রোটোটাইপ কোডগুলি ব্যবহার করে আমাদের বিবাদ রয়েছে। আপনাকে কীটির চারপাশে স্ট্রিং ফাংশনটি ব্যবহার করতে হবে না, এটি alচ্ছিক।

 newLookUpObj = {};
 $.each(oldLookUpObj,function(key,value){
        newLookUpObj[value] = String(key);
    });

2

এটি বোঝার পদ্ধতিতে একটি ছোট এক্সটেনশন এবং পরিবর্তে লোডাশ ব্যবহার করে:

var getKeyByValue = function(searchValue) {
  return _.findKey(hash, function(hashValue) {
    return searchValue === hashValue;
  });
}

FindKey প্রথম কীটি অনুসন্ধান করবে এবং ফিরে আসবে যা মানটির সাথে মেলে।
আপনি যদি তার পরিবর্তে শেষ ম্যাচটি চান তবে এর পরিবর্তে FindLastKey ব্যবহার করুন।


2

যেন এই প্রশ্নটি কোনও সজ্জার কাছে মারেনি ...

কৌতূহল যা আপনাকে এনেছে তার জন্য এখানে একটি ...

আপনি যদি নিশ্চিত হন যে আপনার অবজেক্টের কেবল স্ট্রিং মান থাকবে তবে আপনি এই বাস্তবায়নটি আটকে রাখতে সত্যিই নিজেকে নিঃশেষ করতে পারেন:

var o = { a: '_A', b: '_B', c: '_C' }
  , json = JSON.stringify(o)
  , split = json.split('')
  , nosj = split.reverse()
  , o2 = nosj.join('');

var reversed = o2.replace(/[{}]+/g, function ($1) { return ({ '{':'}', '}':'{' })[$1]; })
  , object = JSON.parse(reversed)
  , value = '_B'
  , eulav = value.split('').reverse().join('');

console.log('>>', object[eulav]);

এখান থেকে এখানে কিছু বানানোর জন্য দরকারী কিছু আছে ...

আশা করি এটি আপনাকে মজা দেবে।


2

এখানে এর জন্য একটি লোড্যাশ সমাধান রয়েছে যা নেস্টেড অবজেক্টের চেয়ে ফ্ল্যাট কী => মান অবজেক্টের জন্য কাজ করে। স্বীকৃত উত্তরের ব্যবহারের পরামর্শ_.findKey নেস্টেড অবজেক্টযুক্ত বস্তুর জন্য কাজ করে, তবে এটি এই সাধারণ পরিস্থিতিতে কাজ করে না।

এই পদ্ধতির সাহায্যে বস্তুটি উল্টে যায়, মানগুলির জন্য কী অদলবদল হয় এবং তারপরে নতুন (উল্টানো) বস্তুর মানটি সন্ধান করে কীটি সন্ধান করে। যদি চাবিটি না পাওয়া যায় তবে falseতা ফেরত দেওয়া হবে, যা আমি পছন্দ করি undefinedতবে আপনি _.getপদ্ধতিটির তৃতীয় প্যারামিটারে সহজেই এটিকে সরিয়ে নিতে পারেন getKey()

// Get an object's key by value
var getKey = function( obj, value ) {
	var inverse = _.invert( obj );
	return _.get( inverse, value, false );
};

// US states used as an example
var states = {
	"AL": "Alabama",
	"AK": "Alaska",
	"AS": "American Samoa",
	"AZ": "Arizona",
	"AR": "Arkansas",
	"CA": "California",
	"CO": "Colorado",
	"CT": "Connecticut",
	"DE": "Delaware",
	"DC": "District Of Columbia",
	"FM": "Federated States Of Micronesia",
	"FL": "Florida",
	"GA": "Georgia",
	"GU": "Guam",
	"HI": "Hawaii",
	"ID": "Idaho",
	"IL": "Illinois",
	"IN": "Indiana",
	"IA": "Iowa",
	"KS": "Kansas",
	"KY": "Kentucky",
	"LA": "Louisiana",
	"ME": "Maine",
	"MH": "Marshall Islands",
	"MD": "Maryland",
	"MA": "Massachusetts",
	"MI": "Michigan",
	"MN": "Minnesota",
	"MS": "Mississippi",
	"MO": "Missouri",
	"MT": "Montana",
	"NE": "Nebraska",
	"NV": "Nevada",
	"NH": "New Hampshire",
	"NJ": "New Jersey",
	"NM": "New Mexico",
	"NY": "New York",
	"NC": "North Carolina",
	"ND": "North Dakota",
	"MP": "Northern Mariana Islands",
	"OH": "Ohio",
	"OK": "Oklahoma",
	"OR": "Oregon",
	"PW": "Palau",
	"PA": "Pennsylvania",
	"PR": "Puerto Rico",
	"RI": "Rhode Island",
	"SC": "South Carolina",
	"SD": "South Dakota",
	"TN": "Tennessee",
	"TX": "Texas",
	"UT": "Utah",
	"VT": "Vermont",
	"VI": "Virgin Islands",
	"VA": "Virginia",
	"WA": "Washington",
	"WV": "West Virginia",
	"WI": "Wisconsin",
	"WY": "Wyoming"
};

console.log( 'The key for "Massachusetts" is "' + getKey( states, 'Massachusetts' ) + '"' );
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>


2

এখানে আমার সমাধানটি প্রথম:

উদাহরণস্বরূপ, আমি অনুমান করি যে আমাদের একটি অবজেক্ট রয়েছে যাতে তিনটি মান জোড়া রয়েছে:

function findKey(object, value) {

    for (let key in object)
        if (object[key] === value) return key;

    return "key is not found";
}

const object = { id_1: "apple", id_2: "pear", id_3: "peach" };

console.log(findKey(object, "pear"));
//expected output: id_2

আমরা কেবল একটি ফাইন্ডকি (অ্যারে, মান) লিখতে পারি যা দুটি পরামিতি নেয় যা একটি অবজেক্ট এবং আপনি যে কীটির সন্ধান করছেন তার মান। যেমন, এই পদ্ধতিটি পুনরায় ব্যবহারযোগ্য এবং আপনাকে এই ফাংশনের জন্য কেবলমাত্র দুটি পরামিতি পেরিয়ে প্রতিবার ম্যানুয়ালি পুনরায় পুনরুক্ত করার প্রয়োজন হবে না।


2

ES6 পদ্ধতি:

Object.fromEntries(Object.entries(a).map(b => b.reverse()))['value_you_look_for']

0

আমি সাধারণত লোড্যাশকে আন্ডারস্কোরের চেয়ে সুপারিশ করি।

যদি আপনার কাছে থাকে তবে এটি ব্যবহার করুন।

যদি আপনি তা না করেন, তবে আপনার লড্যাশ.এনভার্ট এনএমপি প্যাকেজটি ব্যবহার করা উচিত, যা খুবই ক্ষুদ্র।

আপনি কীভাবে ঝাল ব্যবহার করে এটি পরীক্ষা করতে পারেন তা এখানে:

1) নিম্নলিখিত বিষয়বস্তু সহ gulpfile.js নামে একটি ফাইল তৈরি করুন:

// Filename: gulpfile.js
var gulp = require('gulp');
var invert = require('lodash.invert');   
gulp.task('test-invert', function () {
  var hash = {
    foo: 1,
    bar: 2
  };
  var val = 1;
  var key = (invert(hash))[val];  // << Here's where we call invert!
  console.log('key for val(' + val + '):', key);
});

2) লড্যাশ.ইনভার্ট প্যাকেজ এবং গল্প ইনস্টল করুন

$ npm i --save lodash.invert && npm install gulp

3) পরীক্ষা করে যে এটি কাজ করে:

$ gulp test-invert
[17:17:23] Using gulpfile ~/dev/npm/lodash-invert/gulpfile.js
[17:17:23] Starting 'test-invert'...
key for val(1): foo
[17:17:23] Finished 'test-invert' after 511 μs

তথ্যসূত্র

https://www.npmjs.com/package/lodash.invert

https://lodash.com/

লোডাশ এবং আন্ডারস্কোরের মধ্যে পার্থক্য

https://github.com/gulpjs/gulp


গুল্প কেন এখানে জড়িত? কেবল স্ক্রিপ্টটি চালান ...
রাই-

0

জেএস সমাধান সমাধান করুন Unders

let samplLst = [{id:1,title:Lorem},{id:2,title:Ipsum}]
let sampleKey = _.findLastIndex(samplLst,{_id:2});
//result would be 1
console.log(samplLst[sampleKey])
//output - {id:2,title:Ipsum}

0

এটি আমার পক্ষে অবজেক্টের কী / মান পাওয়ার জন্য কাজ করেছিল।

let obj = {
        'key1': 'value1',
        'key2': 'value2',
        'key3': 'value3',
        'key4': 'value4'
    }
    Object.keys(obj).map(function(k){ 
    console.log("key with value: "+k +" = "+obj[k])    
    
    })
    


-1

সত্যিই সোজা।

const CryptoEnum = Object.freeze({
                    "Bitcoin": 0, "Ethereum": 1, 
                    "Filecoin": 2, "Monero": 3, 
                    "EOS": 4, "Cardano": 5, 
                    "NEO": 6, "Dash": 7, 
                    "Zcash": 8, "Decred": 9 
                  });

Object.entries(CryptoEnum)[0][0]
// output => "Bitcoin"

6
কোনও গ্যারান্টি নেই যে অবজেক্ট অর্ডার একই হবে ...
ডাউনগোট

-2

সহজবোধ্য রাখো!

পরিশীলিত পদ্ধতি বা লিবসের মাধ্যমে আপনাকে অবজেক্টটি ফিল্টার করার দরকার নেই, জাভাস্ক্রিপ্টের অবজেক্ট.ওয়ালিউস নামে একটি বিল্ট ফাংশন রয়েছে

উদাহরণ:

let myObj = {jhon: {age: 20, job: 'Developer'}, marie: {age: 20, job: 
'Developer'}};

function giveMeTheObjectData(object, property) {
   return Object.values(object[property]);
}

giveMeTheObjectData(myObj, 'marie'); // => returns marie: {}

এটি বস্তুর সম্পত্তি ডেটা ফেরত দেবে।

তথ্যসূত্র

https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Object/values

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.