Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组在节点中重写自身。给我不同的输出_Javascript_Node.js - Fatal编程技术网

Javascript 数组在节点中重写自身。给我不同的输出

Javascript 数组在节点中重写自身。给我不同的输出,javascript,node.js,Javascript,Node.js,这段代码有什么问题 let list = ['*','*']; let newList=[]; newList.push(list); for (let i=0; i<list.length; i++) { if (i==0) list[i] = 'A'; newList.push(list); if (i==1) list[i] = 'B'; newList.push(list); } console.log(newList) 请给我解释一下,为什么

这段代码有什么问题

let list = ['*','*'];
let newList=[]; 
newList.push(list);

for (let i=0; i<list.length; i++) {
    if (i==0) list[i] = 'A';
    newList.push(list);
    if (i==1) list[i] = 'B';
    newList.push(list);
}
console.log(newList)

请给我解释一下,为什么会出现这个输出。

数组是JavaScript中的对象,
list
包含对数组的引用
newList
包含对相同
list
对象的引用,
newList[0]==newList[1]
。一旦修改了
列表
,它将以相同的方式显示在所有使用它的引用处

应在每次迭代中创建一个新数组:

let list = ['*','*'];
let newList=[]; 
newList.push(list);

for (let i=0; i<list.length; i++) {
    list = [...list];

    if (i==0) list[i] = 'A';
    if (i==1) list[i] = 'B';
    newList.push(list);
}
let list=['*','*'];
让newList=[];
newList.push(列表);

对于(设i=0;iPlus,
newList.push
应该在
if
块内执行,以获得预期的结果
[['*','*'],['A','*'],['A','B']]
。感谢您的注意。似乎有不必要的
newList.push(list)
let list = ['*','*'];
let newList=[]; 
newList.push(list);

for (let i=0; i<list.length; i++) {
    list = [...list];

    if (i==0) list[i] = 'A';
    if (i==1) list[i] = 'B';
    newList.push(list);
}