Bagaimana cara mendapatkan kunci dalam objek JavaScript berdasarkan nilainya?

387

Saya memiliki objek JavaScript yang cukup sederhana, yang saya gunakan sebagai array asosiatif. Apakah ada fungsi sederhana yang memungkinkan saya untuk mendapatkan kunci untuk suatu nilai, atau apakah saya harus mengulangi objek dan menemukannya secara manual?

arik
sumber
Tidak ada fungsi standar untuk melakukan ini. Jika pemetaan benar-benar dua arah, maka sepele untuk membuat peta "terbalik" dan mengindeksnya. Kalau tidak, properti-iterator sederhana (dengan hasOwnProperty gaurd, mungkin) dan pengembalian awal yang tersembunyi di dalam fungsi tidak hanya berfungsi dengan baik ...
Bagaimana ini bisa berfungsi jika suatu objek direferensikan oleh lebih dari satu kunci? var o = []; var map = {first: o, second: o}. Apa yang akan find_key(o)kembali?
Gareth
3
tidak masalah;) Saya hanya bermaksud menggunakannya untuk array dengan pasangan kunci-nilai-unik.
arik
Saya telah membuat versi tanpa iterasi stackoverflow.com/a/36705765/696535 . Akan menarik untuk menguji semua solusi yang diusulkan di jsfiddle
Pawel

Jawaban:

90

Dengan perpustakaan Underscore.js :

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

(_.invert(hash))[1]; // => 'foo'
beringin
sumber
385
@ GeorgeJempty Tidak semua orang ingin memuat perpustakaan 5kb untuk pencarian kunci sederhana;)
tckmn
4
Hanya FYI bagi siapa saja yang mencari solusi yang akan memberi Anda SEMUA kunci yang cocok dengan nilai: ini tidak akan berhasil.
Brett
2
tombol garis bawah juga akan berfungsi. underscorejs.org/#keys _.keys ({satu: 1, dua: 2, tiga: 3}); => ["satu", "dua", "tiga"]
Thaddeus Albers
1
_.invert tidak berfungsi di mana nilai menyertakan objek saat serialisasi string bawaan bertabrakan. Anda mungkin menggunakan kekejian ini:_.chain(hash).pairs().findWhere({1: 1}).value()[0]
DanHorner
3
Ini seharusnya bukan jawaban yang diterima, itu mengusulkan solusi melalui perpustakaan yang memaksa perubahan dalam struktur kode saat ini
Matteo
593
function getKeyByValue(object, value) {
  return Object.keys(object).find(key => object[key] === value);
}

ES6, tidak ada mutasi prototipe atau perpustakaan eksternal.

Contoh,

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


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

UncleLaz
sumber
8
Nah, benar-benar bersih jika Anda tidak mendukung IE11 :-) Jika demikian, Anda memerlukan polyfill
Chexpir
4
Bergantung pada implementasinya, ini mungkin membutuhkan ruang O (n) karena keys()mematerialisasi set kunci.
David Ehrmann
2
Bersih tapi lambat.
Dirigible
4
Jika Beberapa kunci memiliki nilai yang sama, gunakan filter alih-alih menemukanfunction getKeyByValue(object, value) { return Object.keys(object).filter(key => object[key] === value); }
saketh
Lol. Ini tidak lambat, itu O (n) yang merupakan runtime terbaik.
Ben Wainwright
179

Tidak ada metode standar yang tersedia. Anda perlu mengulang dan Anda dapat membuat pembantu sederhana:

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'

Satu kata peringatan : Sekalipun di atas berfungsi, umumnya merupakan ide yang buruk untuk memperpanjang host atau objek asli .prototype. Saya melakukannya di sini karena sangat cocok dengan masalah ini. Bagaimanapun, Anda mungkin harus menggunakan fungsi ini di luar .prototypedan meneruskan objek ke dalamnya.

jandy
sumber
2
Sebenarnya tidak apa-apa jika Anda tahu hal-hal seperti itu for-in loop turun rantai properti yang berarti "untuk (var key in obj)" akan memberi Anda "getKeyByValue" sebagai "kunci" di beberapa titik.
Oh, aku suka bagaimana ini diam-diam mengembalikan tidak terdefinisi jika nilainya tidak ada. Sudah selesai dilakukan dengan baik. Selain itu, hanya yang menarik, ini akan menghasilkan O (n) jadi jika objek memiliki satu ton properti (seperti daftar orang di kota besar dan alamatnya), Anda mungkin ingin pencarian yang lebih efisien. Mungkin mengurutkan nilai dan pencarian biner? Eh?
corbin
Terima kasih banyak, pada saat saya melihat ide yang buruk, saya bertanya-tanya mengapa kemudian saya mencari melalui ini dan menambahkan di sini untuk peningkatan jawaban ini dan bacaan yang luas. stackoverflow.com/questions/3085240/…
simongcc
1
@ jAndy BUKAN ===, itu ==. Kode Anda tidak berfungsi dengan ===. Ia mengembalikan tidak terdefinisi.
Dexter
Saya pikir Konversi ke string akan lebih baik untuk memperbaiki kesalahan ketik, tambahkan saja .toString()seperti obj[ key ].toString()dan ke nilai jika diinginkan ...
CrandellWS
129

Seperti yang dikatakan, iterasi diperlukan. Misalnya, di browser modern Anda dapat memiliki:

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

Di mana valueberisi nilai yang Anda cari. Mengatakan itu, saya mungkin akan menggunakan loop.

Kalau tidak, Anda bisa menggunakan objek "hashmap" yang tepat - ada beberapa implementasi di sekitar JS - atau diimplementasikan oleh Anda sendiri.

PEMBARUAN 2018

Enam tahun berlalu, tapi saya masih mendapatkan suara di sini, jadi saya merasa seperti solusi yang lebih modern - untuk browser / lingkungan modern - harus disebutkan dalam jawaban itu sendiri dan bukan hanya di komentar:

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

Tentu saja itu bisa juga fungsi:

const getKeyByValue = (obj, value) => 
        Object.keys(obj).find(key => obj[key] === value);
ZER0
sumber
18
ES6:Object.keys(obj).or(o=>o[key] === value)
Benjamin Gruenbaum
Sayangnya fungsi panah belum ada browser "modern", jadi ini agak tidak berguna saat ini - saya menggunakannya dalam jetpack di Firefox Nightly, itu akan di Firefox 22. Lagi pula, saya tidak mengetahui tentang berbagai orarray metode, dan tidak jelas bagi saya tujuannya di sini: Saya akan menghargai beberapa detail tambahan! :)
ZER0
1
Adapun panah, itu datang dan saya menunggu :) Seperti orpasti! Itu baru-baru ini dievaluasi dan diterima (saya pikir belum ada yang mengimplementasikannya). Apa yang dilakukannya adalah menemukan elemen pertama dari array yang cocok dengan predikat dan mengembalikannya. Jadi [1,2,3,4].or(x=>x>2)akan kembali 3dan [1,2,3,4,5].or(x=>x<3)akan kembali 1. Sesuatu seperti FirstOrDefault C # :)
Benjamin Gruenbaum
Ya, panah akan datang tetapi akan diperlukan untuk digunakan secara luas - kecuali seperti yang saya lakukan, seseorang bekerja pada mesin tertentu. Saya tidak mengetahui proposal baru untuk ES6, saya pikir cukup tertutup: apakah Anda memiliki tautan tentang ormetode ini? Dari apa yang Anda sebutkan tampaknya mengembalikan item yang cocok dengan predikat "atau" array itu sendiri?
ZER0
1
@ sg552 seperti yang disebutkan kemudian, ordiganti namanya. Saya percaya sekarang Anda harus menggunakan find .
ZER0
42

Cara lodash 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'

tidak bisa dihilangkan
sumber
Lodash jelas merupakan solusi terbaik untuk masalah ini. Bahkan lebih baik, daripada cara garis bawah.
arik
4
FYI, "the underscore way": _.findKey(users, { 'age': 1, 'active': true });... itu sama
craigmichaelmartin
jika array adalah nilai yang perlu Anda gunakan: - let obj = {a: [1, 2], b: [3, 4], c: [5, 6]} _.findKey (obj, fungsi (val) { return _.isEqual (val, [5, 6]);});
ashishyadaveee11
8
jika nilai Anda sederhana, seperti string atau bilangan bulat, maka bertentangan dengan harapan ini tidak akan berhasil. misalnya _.find_key({a: "A", b:"B"}, "B"})pengembalian undefinedjadi seperti yang dinyatakan di sini yang perlu Anda lakukan _.find_key({a: "A", b:"B"}, _.partial(_.isEqual,"B")})
ryan2johnson9
1
@ ryan2johnson9 Itu masalah saya dengan Lodash. Saya mengalami kesulitan memahami beberapa fungsi (rupanya saya satu-satunya). Tapi terima kasih, itu berhasil. Saya menemukan solusi lain yang lebih pendek. Ini menyebabkan overheap pada objek yang lebih besar jadi berhati-hatilah dengan yang satu ini. _.invert(haystack)[needle]
Empi
33
function extractKeyValue(obj, value) {
    return Object.keys(obj)[Object.values(obj).indexOf(value)];
}

Dibuat untuk kompilator penutupan untuk mengekstrak nama kunci yang tidak akan diketahui setelah kompilasi

Versi yang lebih seksi tetapi menggunakan Object.entriesfungsi masa depan

function objectKeyByValue (obj, val) {
  return Object.entries(obj).find(i => i[1] === val);
}
Pawel
sumber
7
Saya pikir ini yang terbaik untuk 2017+ karena menggunakan JavaScript biasa.
brainbag
Tampaknya tidak berfungsi jika Anda memiliki dua angka atau lebih yang memiliki nilai yang sama
JuicY_Burrito
@SamuelChen itu benar tetapi jika itu bekerja itu berarti sebuah array diperlukan sebagai hasilnya. Di mana Object.entries(obj).find(i => i[1] === val);gunakan filtersebagai gantinyaObject.entries(obj).filter(i => i[1] === val);
Pawel
Gunakan Object.entries(obj).find( ([ key, value ]) => value === val);
destrrukturisasi
24

ES6 + One Liners

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

Kembalikan semua kunci dengan nilai:

let keys = Object.keys(obj).filter(k=>obj[k]===value);
ayam
sumber
1
Harus menjadi jawaban yang diterima karena tidak ada dependensi.
Andrew Schultz
22

Saya menggunakan fungsi ini:

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

Pemakaian:

// 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
Benny Neugebauer
sumber
10
+1 solusi rapi. Tetapi saya punya pertanyaan: Bukankah Anda harus selalu memeriksa obj.hasOwnProperty(key)atau tidak perlu dalam kasus ini?
V-Light
5
Memutasi prototipe Obyek adalah praktik buruk: stackoverflow.com/questions/23807805/…
Jon Koops
18

Solusi yang tidak dapat diperbaiki

Fungsi utama:

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
}

Objek dengan kunci dan nilai:

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

Uji:

keyByValue("привіт");
// => "ukranian"
Sistem Rebooter
sumber
sederhana: Object.keys(greetings )[Object.values(greetings ).indexOf('привіт')]
shutsman
16

Jaga prototipe Anda tetap bersih.

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

Contoh:

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

Jika Anda bekerja dengan Underscore atau Lodash library, Anda dapat menggunakan fungsi _.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'
craigmichaelmartin
sumber
13

Saya membuat perpustakaan bimap ( https://github.com/alethes/bimap ) yang mengimplementasikan antarmuka peta dua arah JavaScript yang kuat, fleksibel, dan efisien. Ia tidak memiliki dependensi dan dapat digunakan baik di sisi server (di Node.js, Anda dapat menginstalnya dengan npm install bimap) maupun di browser (dengan menautkan ke lib / bimap.js ).

Operasi dasar sangat sederhana:

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"

Pengambilan pemetaan nilai-kunci sama cepatnya di kedua arah. Tidak ada traversal objek / array yang mahal di bawah kap sehingga waktu akses rata-rata tetap konstan terlepas dari ukuran data.

Alethes
sumber
Satu-satunya solusi yang tidak memerlukan iterasi (baik dalam solusi itu sendiri, pustaka standar atau pustaka lain).
Scott Rudiger
6

tidak melihat yang berikut:

const obj = {
  id: 1,
  name: 'Den'
};

function getKeyByValue(obj, value) {
  return Object.entries(obj).find(([, name]) => value === name);
}

const [ key ] = getKeyByValue(obj, 'Den');
console.log(key)
  

Den Kerny
sumber
5

Karena nilai-nilai itu unik, harus dimungkinkan untuk menambahkan nilai-nilai sebagai seperangkat kunci tambahan. Ini bisa dilakukan dengan cara pintas berikut.

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

Ini akan memungkinkan pengambilan baik melalui kunci atau nilainya:

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

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

Ini mengasumsikan bahwa tidak ada elemen umum antara kunci dan nilai.

Noel Abrahams
sumber
Menjelajahi semua solusi, saya memilih yang ini. Sangat intuitif.
nehem
1
Satu-satunya solusi yang tidak memerlukan iterasi (baik dalam solusi itu sendiri, pustaka standar atau pustaka lain).
Scott Rudiger
OP memang mengatakan bahwa pasangan kunci / nilai semuanya unik karena ini jawaban teknologi rendah hanya fantastis! Bagus;)
customcommander
4

Diberikan input={"a":"x", "b":"y", "c":"x"}...

  • Untuk menggunakan nilai pertama (mis. 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)

  • Untuk menggunakan nilai terakhir (mis. 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)

  • Untuk mendapatkan berbagai kunci untuk setiap nilai (misalnya 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)

Fabio Beltramini
sumber
1
ini jelas merupakan jawaban terbaik, tetapi saya menggaruk-garuk kepala saya untuk mengubah itu untuk mengembalikan hanya kunci untuk objek yang diberikan, yaitu secara fungsional setara dengan indexOf untuk array.
Souhaieb Besbes
Kecuali memori adalah kendala dan Anda bersedia menghabiskan banyak daya pemrosesan untuk melihat melalui objek berkali-kali, cukup simpan "output" seperti ditunjukkan di atas ke variabel dan lihat hasilnya di sana ... seperti output['x']. Itukah yang kamu tanyakan?
Fabio Beltramini
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;
    } 
Atur
sumber
@ Fr0zenFyr: Tautan berikut dapat menjawab pertanyaan Anda dengan lebih baik - stackoverflow.com/questions/8423493/…
Atur
2

Atau, lebih mudah lagi - buat objek baru dengan kunci dan nilai-nilai dalam urutan yang Anda inginkan kemudian lihatlah terhadap objek itu. Kami mengalami konflik menggunakan kode prototipe di atas. Anda tidak harus menggunakan fungsi String di sekitar tombol, itu opsional.

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

Ini adalah ekstensi kecil untuk metode Underscorejs, dan menggunakan Lodash sebagai gantinya:

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

FindKey akan mencari dan mengembalikan kunci pertama yang cocok dengan nilainya.
Jika Anda menginginkan pertandingan terakhir sebagai gantinya, gunakan FindLastKey sebagai gantinya.

kumarharsh
sumber
2

Seolah pertanyaan ini belum dikalahkan hingga bubur ...

Inilah satu hanya untuk rasa ingin tahu apa pun yang membawa Anda ...

Jika Anda yakin bahwa objek Anda hanya akan memiliki nilai string, Anda dapat benar-benar menghabiskan diri untuk menyulap implementasi ini:

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]);

Mungkin ada sesuatu yang berguna untuk dibangun dari sini ...

Semoga ini menghibur Anda.

Cody
sumber
2

Inilah solusi Lodash untuk ini yang berfungsi untuk objek nilai kunci datar =>, daripada objek bersarang. Saran jawaban yang diterima untuk menggunakan _.findKeykarya untuk objek dengan objek bersarang, tetapi itu tidak berfungsi dalam keadaan umum ini.

Pendekatan ini membalikkan objek, menukar kunci untuk nilai, dan kemudian menemukan kunci dengan mencari nilai pada objek baru (terbalik). Jika kunci tidak ditemukan maka falsedikembalikan, yang saya sukai undefined, tetapi Anda dapat dengan mudah menukar ini di parameter ketiga _.getmetode di 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>

Kevin Leary
sumber
2

Ini solusinya dulu:

Sebagai contoh, saya kira kita memiliki objek yang berisi tiga pasangan nilai:

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

Kita cukup menulis findKey (array, value) yang mengambil dua parameter yang merupakan objek dan nilai kunci yang Anda cari. Dengan demikian, metode ini dapat digunakan kembali dan Anda tidak perlu mengulangi objek secara manual setiap kali dengan hanya melewatkan dua parameter untuk fungsi ini.

Ivan Zhang
sumber
2

Metode ES6 :

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

Saya biasanya merekomendasikan lodash daripada garis bawah.

Jika Anda memilikinya, gunakan itu.

Jika tidak, maka Anda harus mempertimbangkan menggunakan paket lodash.invert npm, yang cukup kecil.

Inilah cara Anda mengujinya menggunakan tegukan:

1) Buat file bernama gulpfile.js dengan konten berikut:

// 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) Instal paket lodash.invert dan teguk

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

3) Uji itu berfungsi:

$ 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

Referensi

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

https://lodash.com/

Perbedaan antara lodash dan garis bawah

https://github.com/gulpjs/gulp

l3x
sumber
Mengapa Gulp terlibat di sini? Jalankan saja skripnya ...
Ry-
0

Garis bawahi solusi js

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}
Pooja
sumber
0

ini bekerja untuk saya untuk mendapatkan kunci / nilai objek.

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

Sahil Ralkar
sumber
-1

Sangat mudah.

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"
onepix
sumber
6
Tidak ada jaminan bahwa urutan objeknya akan sama ...
Downgoat
-2

Tetap sederhana!

Anda tidak perlu memfilter objek melalui metode atau lib canggih, Javascript memiliki fungsi bawaan bernama Object.values .

Contoh:

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: {}

Ini akan mengembalikan data properti objek.

Referensi

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

Ore4444
sumber