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.

Olical
sumber
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.

Trann
sumber
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];
Josiah Ruddell
sumber
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])
}
Juan Mendes
sumber
@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 
})
Akhil Aravind
sumber
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 ]
ZEE
sumber
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]);
    
}

Nikhil Vats
sumber
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

Kevin Florida
sumber
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.

Menggabungkan
sumber
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"]
Aaqib
sumber
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].

mmurch
sumber
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);
}
ekbgh
sumber
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'));
Ashraf Abusada
sumber
-1

Cepat & kotor:

function getObjName(obj) {
  return (wrap={obj}) && eval('for(p in obj){p}') && (wrap=null);
}
David
sumber