gpt4 book ai didi

Javascript将数组设置为另一个数组元素的属性

转载 作者:行者123 更新时间:2023-12-02 16:44:42 24 4
gpt4 key购买 nike

我想创建一个父级数组和另一个子级数组,然后为每个父级设置一个子级数组。

这是代码:

var parent = [];
var child = [];

// Set kids
for (a = 0; a <= 5; a++) {
child[a] = [];
child[a].name = "kid " + a;
}

// Set parents and their kids
for (b = 0; b < 2; b++) {
parent[b] = [];
parent[b].name = "parent " + b;
parent[b].kids = child;
}

// One parent has kid name anna
parent[0].kids[2].name = "anna";

// Output
for (a = 0; a < 2; a++) {
console.log("");

for (b = 0; b < 5; b++) {
console.log(b + " -> " + parent[a].name + " " + parent[a].kids[b].name);
}
}
<小时/>

第一个 parent

0 -> parent 0 child 0

1 -> parent 0 child 1

2 -> 父级 0 安娜

3 -> 父 0 子 3

4 -> 父 0 子 4

<小时/>

第二个 parent

0 -> 父 1 子 0

1 -> parent 1 child 1

2 -> 父级 1 安娜

3 -> parent 1 child 3

4 -> parent 1 child 4

<小时/>

为什么 parent 双方都有相同的 child ,只有第一个 child 的名字应该是安娜,更重要的是我怎样才能让它正常工作?

最佳答案

正如已经提到的,您的问题是将相同的子级数组分配给每个父级。

如果数组 child 包含原始值,那么使用任何复制数组然后设置 kids 属性的方式实际上都会有所帮助,因为浅复制就足够了。然而,这里提出的问题有点复杂,因为元素不是基元,因此应该使用深度复制的方法。

更具体地说,不仅需要复制整个数组,还需要单独复制每个项目。

每次将其分配给父级时,您都可以尝试使用类似的复制子级。这不是目前最漂亮、最快的方法,但应该足够好开始。

function clone(obj) {
if(obj == null || typeof(obj) != 'object')
return obj;

var temp = obj.constructor(); // changed

for(var key in obj) {
if(obj.hasOwnProperty(key)) {
temp[key] = clone(obj[key]);
}
}
return temp;
}

function copy_kids(kids) {
var new_kids = [];
for (var kid_id = 0; kid_id < kids.length; ++kid_id) {
new_kids[kid_id] = clone(kids[kid_id]);
}
return new_kids;
}

复制对象的函数取自 older answer .

要使您的代码正常工作,请更改以下内容:

// Older
parent[b].kids = child;

// Newer
parent[b].kids = copy_kids(child);

准确地说,这并不是真正的深度复制,只是比复制数组本身更深一点。您可以阅读有关深拷贝与浅拷贝的更多信息 here

关于Javascript将数组设置为另一个数组元素的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27214968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com