Mendapatkan nama properti objek


179

Saya bertanya-tanya apakah ada cara dalam JavaScript untuk mengulangi objek seperti itu.

for(var i in myObject) {
    // ...
}

Tapi dapatkan nama masing-masing properti seperti ini.

for(var i in myObject) {
    separateObj[myObject[i].name] = myObject[i];
}

Sepertinya saya tidak dapat menemukan yang seperti itu di Google. Mereka mengatakan untuk memberikan nama variabel dengan mereka tetapi ini bukan pilihan untuk apa yang saya coba capai.

Terima kasih atas bantuan yang bisa Anda tawarkan.



4
seperateseharusnyaseparate
Juan Mendes

13
@JuanMendes Terima kasih, diperbaiki. Wow, pertanyaan ini adalah ledakan dari masa lalu. Saya sudah datang 'l' + new Array(1000).join('o') + 'ng'sejak itu.
Olical

1
jawaban yang dicentang tidak benar, gunakan metode Object.keys ().
Kevin Florida

jawaban yang diperiksa dan Object.keys () melakukan hal yang berbeda, jadi tergantung pada apa yang Anda inginkan, salah satunya mungkin benar.
Gabe Johnson

Jawaban:


163

Gunakan Object.keys ():

var myObject = { a: 'c', b: 'a', c: 'b' };
var keyNames = Object.keys(myObject);
console.log(keyNames); // Outputs ["a","b","c"]

Object.keys() memberi Anda array nama properti milik objek input.


3
Lebih khusus, Object.keys (obj) mengembalikan array nama properti, yaitu kunci, milik yang diteruskan ke obj.
seorang pelajar tidak memiliki nama

1
Selain itu, Object.keys () hanya mengembalikan properti yang dapat Anda terima, Object.getOwnProperties () akan mengembalikan semua propertinya
bitfishxyz

192

i adalah namanya.

for(var name in obj) {
    alert(name);
    var value = obj[name];
    alert(value);
}

Jadi Anda bisa melakukan:

seperateObj[i] = myObject[i];

1
Properti objek dapat diakses melalui sintaks braket. obj.prop1 sama dengan obj ['prop1'].
Josiah Ruddell

5
Praktik yang baik adalah menggunakan HasOwnProperty saat menggunakan untuk..in
Bakudan

5
@ Bakudan tahu apa yang Anda maksud, tetapi cara yang lebih baik untuk mengatakannya adalah bahwa Anda harus menggunakan hasOwnPropertyjika Anda tidak ingin properti yang diwarisi. Dengan begitu Anda tidak secara membabi buta mengikuti beberapa aturan. Mungkin dalam beberapa kasus Anda benar-benar ingin melihat properti yang diwarisi. Cara lain untuk mengulang melalui properti objek sendiri adalah menggunakan Object.keys . Object.keys(obj).forEach(function(prop){ alert obj[prop]})
Juan Mendes

@ Wang Mendes Ya, saya maksudkan kasus dengan properti yang diwarisi. Saya terpaksa (sedih) untuk menggunakan pendekatan ini, karena IE8 tidak mendukung Object.keys ...
Bakudan

17

Penafian Saya salah mengerti pertanyaannya adalah: "Dapatkah saya tahu nama properti tempat objek itu dilampirkan", tetapi memilih untuk meninggalkan jawabannya karena beberapa orang mungkin berakhir di sini saat mencari untuk itu.


Tidak, suatu objek dapat dilampirkan ke beberapa properti, sehingga tidak memiliki cara untuk mengetahui namanya.

var obj = {a:1};
var a = {x: obj, y: obj}

Siapa nama keberatan itu?

Apakah Anda yakin tidak hanya menginginkan nama properti dari for for loop?

for (var propName in obj) {
  console.log("Iterating through prop with name", propName, " its value is ", obj[propName])
}

@ChadSchouggins Apa yang Anda katakan itu benar, tapi itu bukan pertanyaan yang saya jawab, karena ya, Anda dapat mengulangi suatu objek untuk mendapatkan setiap nama properti. Saya menjawab pertanyaan yang mungkin bukan tujuan OP, saya hanya ingin menjelaskan bahwa beberapa properti dapat menunjuk ke objek yang sama.
Juan Mendes

7

Anda dapat dengan mudah beralih pada objek

mis: jika objeknya var a = {a: 'apple', b: 'ball', c: 'cat', d: 'doll', e: 'elephant'};

Object.keys(a).forEach(key => {
   console.log(key) // returns the keys in an object
   console.log(a[key])  // returns the appropriate value 
})

6

untuk mengakses langsung properti objek dengan posisi ... umumnya berguna untuk properti [0] ... sehingga menyimpan info tentang lebih lanjut ... atau dalam node.js 'require.cache [0]' untuk modul eksternal pertama yang dimuat , dll.

Object.keys( myObject )[ 0 ]
Object.keys( myObject )[ 1 ]
...
Object.keys( myObject )[ n ]

4

Selain "Object.keys (obj)", kami memiliki loop "for ... in" yang sangat sederhana - yang melingkupi nama properti objek yang dapat dihitung.

const obj = {"fName":"John","lName":"Doe"};

for (const key in obj) {
    //This will give key
      console.log(key);
    //This will give value
    console.log(obj[key]);
    
}


3

Untuk mendapatkan properti objek atau "kunci array" atau "indeks array" tergantung pada apa bahasa asli Anda ..... Gunakan metode Object.keys ().

Penting, ini hanya kompatibel dengan "Browser modern":

Jadi, jika objek Anda dipanggil, myObject ...

var c = 0;
for(c in myObject) {
    console.log(Object.keys(myObject[c]));
}

Walla! Ini pasti akan bekerja di firefox terbaru dan ie11 dan chrome ...

Berikut ini beberapa dokumentasi di MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys


2

DALAM ES5

Misalnya Anda memiliki objek seperti ini:

var ELEMENTS = {
    STEP_ELEMENT: { ID: "0", imageName: "el_0.png" },
    GREEN_ELEMENT: { ID: "1", imageName: "el_1.png" },
    BLUE_ELEMENT: { ID: "2", imageName: "el_2.png" },
    ORANGE_ELEMENT: { ID: "3", imageName: "el_3.png" },
    PURPLE_ELEMENT: { ID: "4", imageName: "el_4.png" },
    YELLOW_ELEMENT: { ID: "5", imageName: "el_5.png" }
};

Dan sekarang jika Anda ingin memiliki fungsi yang jika Anda lulus '0' sebagai param - untuk mendapatkan 'STEP_ELEMENT', jika '2' untuk mendapatkan 'BLUE_ELEMENT' dan untuk

function(elementId) {
    var element = null;

    Object.keys(ELEMENTS).forEach(function(key) {
        if(ELEMENTS[key].ID === elementId.toString()){
            element = key;
            return;
        }    
    });

    return element;
}

Ini mungkin bukan solusi terbaik untuk masalah ini tetapi bagus untuk memberi Anda ide bagaimana melakukannya.

Bersulang.


1

Mulai 2018, Anda dapat menggunakan Object.getOwnPropertyNames()sebagaimana dijelaskan dalam Dokumentasi Mozilla Pengembang

const object1 = {
  a: 1,
  b: 2,
  c: 3
};

console.log(Object.getOwnPropertyNames(object1));
// expected output: Array ["a", "b", "c"]

0

Ketika Anda melakukan for / in loop yang Anda pasang terlebih dahulu, saya adalah nama properti. Jadi, Anda memiliki nama properti, i, dan mengakses nilainya dengan melakukan myObject [i].


0

Solusi ini juga berfungsi.

// Solution One
function removeProperty(obj, prop) {
  var bool;
  var keys = Object.keys(obj);
  for (var i = 0; i < keys.length; i++) {
    if (keys[i] === prop) {
      delete obj[prop];
      bool = true;
    } 
  }
  return Boolean(bool);
}


//Solution two
function removeProperty(obj, prop) {
  var bool;
  if (obj.hasOwnProperty(prop)) {
      bool = true;
      delete obj[prop];
  }
  return Boolean(bool);
}

0

Menggunakan Object.keys()fungsi untuk mendapatkan properti dari suatu Object, dan itu dapat membantu mencari properti dengan nama, misalnya:

const Products = function(){
    this.Product = "Product A";
    this.Price = 9.99;
    this.Quantity = 112;
};

// Simple find function case insensitive
let findPropByName = function(data, propertyName){
 let props = [];
 Object.keys(data).forEach(element => {
    return props.push(element.toLowerCase());
  });
  console.log(props);
  let i = props.indexOf(propertyName.toLowerCase());

  if(i > -1){
    return props[i];
  }
  return false;
};

// calling the function
let products = new Products();
console.log(findPropByName(products, 'quantity'));

-1

Cepat & kotor:

function getObjName(obj) {
  return (wrap={obj}) && eval('for(p in obj){p}') && (wrap=null);
}
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.