cara terbaik untuk mendapatkan kunci dari objek javascript kunci / nilai


186

Jika saya memiliki objek JS seperti:

var foo = { 'bar' : 'baz' }

Jika saya tahu yang foomemiliki struktur kunci / nilai dasar itu, tetapi tidak tahu nama kunci itu, apa cara termudah untuk mendapatkannya? for ... in? $.each()? Saya harap ada sesuatu yang lebih baik ....


5
apa yang salah dengan ... di?
Matt

1
Rasanya tidak langsung dan Anda harus menggunakan hasOwnProperty. Saya kira saya akan membuat fungsi perpustakaan yang melakukannya ....
sprugman

Jawaban:


93

Jika Anda ingin mendapatkan semua kunci, ECMAScript 5 diperkenalkanObject.keys . Ini hanya didukung oleh browser yang lebih baru tetapi dokumentasi MDC memberikan implementasi alternatif (yang juga menggunakan for...inbtw):

if(!Object.keys) Object.keys = function(o){
     if (o !== Object(o))
          throw new TypeError('Object.keys called on non-object');
     var ret=[],p;
     for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
     return ret;
}

Tentu saja jika Anda menginginkan keduanya, kunci dan nilai, maka itu for...inadalah satu-satunya solusi yang masuk akal.


pmemberi saya kunci tetapi bagaimana cara mendapatkan nilai kunci? Terima kasih.
Si8

1
Untuk kedua kunci dan nilai, gunakan Object.entries () developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… yang baru
Kzqai

mungkin ini merupakan indikasi dari pemahaman saya yang terbatas, tetapi jawaban ini tampaknya sangat bertele-tele (diakui dapat digunakan kembali) untuk sesuatu yang sederhana seperti mendapatkan kunci / nilai. Tidakkah seharusnya jawaban @Michael Benin ditandai sebagai yang terbaik?
Aaron Matthews

7
Erm ... apakah ada orang lain yang mengklik tautan pertama diarahkan ke narkotika anonim?
John Duskin

193

Anda akan beralih di dalam objek dengan for for:

for(var i in foo){
  alert(i); // alerts key
  alert(foo[i]); //alerts key's value
}

Atau

Object.keys(foo)
  .forEach(function eachKey(key) { 
    alert(key); // alerts key 
    alert(foo[key]); // alerts value
  });

Bagaimana jika saya tidak ingin foo[i]menjadi seperti itu "_proto_"?
user2284570


Bagaimana jika saya tidak ingin memberi tahu () foo[i]jika iada some string?
user2284570

@ user2284570: saya bisa menjadi string - tidak ada masalah.
Gerfried

bukankah maksud Anda (var i di Object.keys (foo)) {
samurai jack

103

Anda dapat mengakses setiap tombol satu per satu tanpa iterasi seperti pada:

var obj = { first: 'someVal', second: 'otherVal' };
alert(Object.keys(obj)[0]); // returns first
alert(Object.keys(obj)[1]); // returns second

3
Anda sekarang dapat menggunakan operator spread untuk tujuan ini, terlihat lebih baik: const [firstKey, ...rest] = Object.keys(obj);
Nerlin

65

Diberikan Objek Anda:

var foo = { 'bar' : 'baz' }

Untuk mendapatkan bar, gunakan:

Object.keys(foo)[0]

Untuk mendapatkan baz, gunakan:

foo[Object.keys(foo)[0]]

Dengan asumsi satu objek


27

Satu liner untuk Anda:

const OBJECT = {
    'key1': 'value1',
    'key2': 'value2',
    'key3': 'value3',
    'key4': 'value4'
};

const value = 'value2';

const key = Object.keys(OBJECT)[Object.values(OBJECT).indexOf(value)];

window.console.log(key); // = key2

26

Ini adalah cara paling sederhana dan mudah. Inilah cara kami melakukan ini.

var obj = { 'bar' : 'baz' }
var key = Object.keys(obj)[0];
var value = obj[key];
     
 console.log("key = ", key) // bar
 console.log("value = ", value) // baz
Object.keys () adalah metode javascript yang mengembalikan array kunci ketika menggunakan objek.

Object.keys(obj) // ['bar']

Sekarang Anda dapat beralih pada objek dan dapat mengakses nilai-nilai seperti di bawah ini-

Object.keys(obj).forEach( function(key) {
  console.log(obj[key]) // baz
})

Anda bisa mendapatkan TypeErrorjika Anda mengharapkan kunci menjadi nomor. Karena kunci selalu berupa string.
Hijau

15

Saya mengalami masalah yang sama dan inilah yang berhasil

//example of an Object
var person = {
    firstName:"John",
    lastName:"Doe",
    age:50,
    eyeColor:"blue"
};

//How to access a single key or value
var key = Object.keys(person)[0];
var value = person.firstName;

11
mengapa tidak var value = person[key];? Dengan begitu Anda tidak perlu tahu kunci nilai yang ingin Anda tarik.
Sean Kendle

14
// iterate through key-value gracefully
const obj = { a: 5, b: 7, c: 9 };
for (const [key, value] of Object.entries(obj)) {
  console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
}

Rujuk MDN


9

Saya tidak melihat hal lain selain itu for (var key in foo).


5

Cara termudah adalah dengan menggunakan Underscore.js:

kunci

_.keys (objek) Ambil semua nama properti objek.

_.keys ({satu: 1, dua: 2, tiga: 3}); => ["satu", "dua", "tiga"]

Ya, Anda membutuhkan perpustakaan tambahan, tetapi sangat mudah!


4
@lonesomeday ya, tapi garis bawah / lodash berguna dalam banyak hal lain, jadi ada baiknya untuk dibesarkan.
jcollum

4

Tidak ada jalan lain selain itu for ... in. Jika Anda tidak ingin menggunakan itu (mungkin karena sedikit tidak efisien harus menguji hasOwnPropertypada setiap iterasi?) Kemudian gunakan konstruksi yang berbeda, misalnya array kvp:

[{ key: 'key', value: 'value'}, ...]

4

Karena Anda sebutkan $.each(), berikut ini adalah pendekatan praktis yang akan bekerja di jQuery 1.6+:

var foo = { key1: 'bar', key2: 'baz' };

// keys will be: ['key1', 'key2']
var keys = $.map(foo, function(item, key) {
  return key;
});

4

Object.keys () Metode Object.keys () mengembalikan array dari properti enumerable milik objek tertentu, dalam urutan yang sama dengan yang disediakan oleh for ... in loop (perbedaannya adalah for-in loop menyebutkan properti dalam rantai prototipe juga).

var arr1 = Object.keys(obj);

Object.values ​​() Metode Object.values ​​() mengembalikan array dari nilai properti enumerable milik objek tertentu, dalam urutan yang sama dengan yang disediakan oleh for ... in loop (perbedaannya adalah bahwa for-in loop enumerate properti dalam rantai prototipe juga).

var arr2 = Object.values(obj);

Untuk lebih lanjut silakan kunjungi di sini


3

gunakan untuk setiap loop untuk mengakses kunci di Object atau Maps di javascript

for(key in foo){
   console.log(key);//for key name in your case it will be bar
   console.log(foo[key]);// for key value in your case it will be baz
}

Catatan: Anda juga bisa menggunakan

Object.keys (foo);

itu akan memberi Anda seperti ini:

[batang];



1

Anda dapat menggunakan fungsionalitas Object.keys untuk mendapatkan kunci seperti:

const tempObjects={foo:"bar"}

Object.keys(tempObjects).forEach(obj=>{
   console.log("Key->"+obj+ "value->"+tempObjects[obj]);
});

0

untuk ditampilkan sebagai string, cukup gunakan:

console.log("they are: " + JSON.stringify(foo));

0

cara terbaik 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])    
    
    })
    

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.