Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.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 为什么console.table()方法只打印所有行中的最后一行?_Javascript_Loops_Console - Fatal编程技术网

Javascript 为什么console.table()方法只打印所有行中的最后一行?

Javascript 为什么console.table()方法只打印所有行中的最后一行?,javascript,loops,console,Javascript,Loops,Console,我创建了一个包含六个对象的数组,每个对象都有三个属性:名称、年龄和职业。我已经给了他们初始值。现在我有另外三个数组,每个数组有六个值(六个不同的名字,六个不同的年龄和六个不同的职业)。我试图通过循环其他三个数组来更改初始数组中对象的属性值,这三个数组的名称年龄和职业值不同。我尝试过在一个for循环、一个while循环和三个不同的循环中实现它。但它不起作用。table()方法正在打印所有表行中循环的最后一次迭代的值(名称:supermentalist,年龄:40,职业:theTwo) let ar

我创建了一个包含六个对象的数组,每个对象都有三个属性:名称、年龄和职业。我已经给了他们初始值。现在我有另外三个数组,每个数组有六个值(六个不同的名字,六个不同的年龄和六个不同的职业)。我试图通过循环其他三个数组来更改初始数组中对象的属性值,这三个数组的名称年龄和职业值不同。我尝试过在一个for循环、一个while循环和三个不同的循环中实现它。但它不起作用。table()方法正在打印所有表行中循环的最后一次迭代的值(名称:supermentalist,年龄:40,职业:theTwo)

let arr=新数组(6).fill({});
对于(arr的要素){
ele.name=“withoutCape”;
ele.age=40;
ele.profession=“程序员”;
}
控制台.工作台(arr);
常量名称=[
“超级英雄”,
“超零”,
“超人”,
“超级蠢”,
“超级科学家”,
“超人名单”,
];
常数=[35,36,37,38,39,40];
康斯特职业=[
“程序员”,
“科学家”,
“密码专家”,
“语源学家”,
“theOne”,
“theTwo”,
];
for(设i=0;i<0.length;i++){
arr[i][“name”]=名称[i];
}
for(设i=0;i<0.length;i++){
arr[i][“年龄”]=年龄[i];
}
for(设i=0;i<0.length;i++){
arr[i].profession=professions[i];
}
控制台.工作台(arr);
请参见以下问题:。您有一个对象数组,所有对象都引用同一个对象,因此更改一个对象会更改所有对象

如果要从
new Array()
调用开始维护,则需要在为每个对象分配/重新分配属性时克隆该对象。(或法维兰在回答中提到的
map()
单个对象。)

沿着这条线的东西

for (let i = 0; i < professions.length; i++) {
  arr[i] = {
    ...arr[i],
    profession: professions[i]
    };
}
for(设i=0;i
let arr=新数组(6).fill({});
对于(arr的要素){
ele.name=“withoutCape”;
ele.age=40;
ele.profession=“程序员”;
}
//记录引用的原始数组
控制台日志(arr);
常量名称=[
“超级英雄”,
“超零”,
“超人”,
“超级蠢”,
“超级科学家”,
“超人名单”,
];
常数=[35,36,37,38,39,40];
康斯特职业=[
“程序员”,
“科学家”,
“密码专家”,
“语源学家”,
“theOne”,
“theTwo”,
];
for(设i=0;i<0.length;i++){
arr[i]={
…啊[i],
专业:专业[i]
};
}
//记录克隆对象的新数组

控制台日志(arr)这不是
控制台。表
错误

看看
让arr=newarray(6).fill({})

这与:

let shared = {};
let arr = new Array(6).fill(shared);
因此,您在每一行中放置相同的对象,因此
arr[0]===arr[1]===…
所以你总是修改一切

改变
让arr=newarray(6.fill().map(()=>({}))

它是有效的

使您的代码更好可能是:

const names = [
  "superhero",
  "superzero",
  "supermum",
  "superdumb",
  "superscientist",
  "supermentalist",
];

const ages = [35, 36, 37, 38, 39, 40];

const professions = [
  "programmer",
  "scientist",
  "cryptographer",
  "etymologist",
  "theOne",
  "theTwo",
];

let arr = new Array(6).fill().map( (e, i) => {
    //Warning i can be greather than names/ages/professions.length
    return {
        name: names[i],
        profession : professions[i],
        age: ages[i]
    };
});
console.table(arr);
请参见以下问题:。您有一个对象数组,所有对象都引用同一个对象,因此更改一个对象会更改所有对象。
const names = [
  "superhero",
  "superzero",
  "supermum",
  "superdumb",
  "superscientist",
  "supermentalist",
];

const ages = [35, 36, 37, 38, 39, 40];

const professions = [
  "programmer",
  "scientist",
  "cryptographer",
  "etymologist",
  "theOne",
  "theTwo",
];

let arr = new Array(6).fill().map( (e, i) => {
    //Warning i can be greather than names/ages/professions.length
    return {
        name: names[i],
        profession : professions[i],
        age: ages[i]
    };
});
console.table(arr);