![](/img/trans.png)
[英]Restructure JavaScript object into array of objects with named keys
[英]In an array of named objects in javascript - are the names accessible?
如果我們創建一些對象,並用這些對象填充一個數組,名稱是存儲在數組中,還是僅存儲對象的屬性? 我想這可能是微不足道的,但我一直無法找到答案。
var boxA = {color: "red", width: 100};
var boxB = {color: "yellow", width: 200};
var boxC = {color: "blue", width: 300};
boxArray = [boxA, boxB, boxC];
for (var i = 0; i < boxArray.length; i++) {
//****
// What code do we insert here to log
// boxA
// boxB
// boxC
//****
}
當然,添加是一個微不足道的解決方法
boxA.box = boxA;
等然后打電話
console.log(boxArray[i].box);
但這真的有必要嗎?
要直接回答您的問題-不,您不能做您要問的事情。 我已經遇到過幾次相同的情況。 這就是我所做的。 除了使用數組之外,您還可以將對象添加到對象文字中,然后將該對象映射到某些唯一鍵(例如id)。
var boxes = {
'boxA': {color: 'red', width: 100},
'boxB': {color: 'blue', width: 200},
'boxC': {color: 'yellow', width: 300}
}
for(var boxKey in boxes) {
console.log(boxKey);
}
// to use
boxes.boxA; // do something with boxA
不,那不是那樣的。
變量名稱是對由JS自動為您管理的內存堆區域中的對象的引用 。
詳細而言,這意味着:
var boxA = {color: "red", width: 100};
這個說法:
boxA
與該對象關聯。 因此,該對象尚未被一個變量引用。
var boxArray = [boxA];
這里:
boxArray
分配了對該數組的引用,該引用也放置在堆中。 總結一下:變量名僅存在於代碼清單中,以使開發人員能夠更輕松地推斷出內存中的某些對象,而不是使用內存地址進行操作(這很可怕)。
好吧,boxArray充滿了您要放入其中的變量的值。 示例:如果要保存三個整數變量,而不是變量名。 因此,您的新boxArray等於:
boxArray = [{color: "red", width: 100},{color: "yellow", width: 200},{color: "blue", width: 300}];
如果要獲取對象的鍵,請嘗試Object.keys(object)
Object.keys(boxA)
["color", "width"]
執行代碼無法訪問您的變量名,但是如果您需要執行此操作,則可以嵌套對象:
var boxes = { boxA: { color: "red", width: 100 }, boxB: { color: "yellow", width: 200 }, boxC: { color: "blue", width: 300 } }; Object.keys(boxes).forEach(function(key) { console.log(key) // boxA, boxB, boxC console.log(boxes[key]) // {color: "red", width: 100}, etc. });
遲到了,但是……自從 ES6 javascript 引入了類。 如果類是一個選項,你可以這樣做:
class boxA { constructor() { this.color = "red"; this.width = 100; } };
class boxB { constructor() { this.color = "yellow"; this.width = 200; } };
class boxC { constructor() { this.color = "blue"; this.width = 300; } };
let boxArray = [new boxA(), new boxB(), new boxC()];
for (var i = 0; i < boxArray.length; i++) {
console.log(boxArray[i].constructor.name);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.