这可能是一个愚蠢的问题,但现在我无法弄清楚。所以我有需要。
我正在显示静态数据,但我希望将来使其成为动态数据。
var name = [];
name.push({ name: "Gareth" });
name[0].push({ name: "john" }); // This statement doesn't work as name[0]!=[] I guess.
name[0].push({name:"dolly"});
我想要得到像这样的输出
+name <--- expandable
+0 <--- expandable
name : "gareth"
+0 <--- expandable
name: "john"
+1 <--- expandable
name: "dolly"
我知道这并不困难。但我现在无法弄清楚。我们将不胜感激。
最佳答案
您无法将任何内容push
到name[0]
上,因为它不是数组,但您仍然可以为其分配带有数字的元素并创建自己的推送。
var makePushable = function (obj) {
obj.push = function (item) {
this[this.length] = item;
this.length++;
};
obj.length = 0; //Keep track of how many elements
}
var name = [];
name.push({ name: "Gareth" });
makePushable(name[0]);
name[0].push({ name: "john" });
name[0].push({ name:"dolly" });
我们得到:
name[0] ---> {
name:"gareth",
0: {name:"john"},
1: {name:"dolly"},
length: 2,
push: function () { ... }
}
name[0][0] ---> {name:"john"}
name[0][1] ---> {name:"dolly"}
如果您不希望 push
和 length
显示在 for ( prop in xxx ) if (xxx.hasOwnProperty(prop)) 上
code>,你可以像这样创建一个类:
var Pushable = function (obj) {
for (var i in obj) {
this[i] = obj[i];
}
Object.setPrototypeOf(this, {
push: function (item) {
this[this.length] = item;
Object.getPrototypeOf(this).length++;
},
length: 0
});
};
Pushable.prototype.push = function (item) {
this[this.length] = item;
Object.getPrototypeOf(this).length++;
};
Pushable.prototype.length = 0;
var name = [];
name.push(new Pushable({ name:"Gareth" }));
name[0].push(new Pushable({ name: "john" }));
name[0].push(new Pushable({ name:"dolly" }));
name[0][1].push(new Pushable({ name:"last kid" }));
如果需要,您可以使用 push
函数自动创建一个 Pushable
类。
关于javascript - 如何将json数据推送到2级或n级数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26324806/