【问题标题】:Javascript modifies the orignal object on using map on a nested arrayJavascript 在嵌套数组上使用 map 修改原始对象
【发布时间】:2018-07-18 23:12:44
【问题描述】:

考虑以下示例。一个数组包含在一个对象中,我正在使用 map 来修改数组的内容。

let temp = {
    name:'Scott',
    arr: [1, 2, 3, 4],
};

console.log(temp);
let promise = temp.arr.map((obj) => {
return obj*5;
});

Promise.all(promise).then( (temp) => {
    console.log(temp);
});

输出是:

{ name:'Scott' ,arr: [ 1, 2, 3, 4 ] }
[ 5, 10, 15, 20 ]

有人可以解释一下为什么要修改原始对象吗?

【问题讨论】:

  • 你知道箭头函数参数和之前声明的变量同名吗?
  • 只要给你的变量起合理的名字,再次运行它并记录原始的tempjsfiddle.net/p682uzov
  • 不应该理想地自行修改 temp 的内容吗?或者修改后的数组是否应该作为 promise.all 上数组函数的参数
  • 通过数字数组映射将创建一个全新的数字数组,该数组未链接到原始引用,如果预期行为是改变属性 arr 中的数组,请使用简单的 forEach 或 for 循环遍历项目并更改它们的值。

标签: javascript arrays node.js


【解决方案1】:

原版从未更新,但您更改了temp 所指的内容。

试试这个:

Promise.all(promise).then( (result) => {
    console.log("temp", temp);
    console.log("result", result);
});

【讨论】:

  • 添加到他的答案中,原始内容没有被修改。 console.log(temp.arr) 仍将解析为与原始数组相同的数组。承诺返回一个包含所有映射值的新数组。 .then((temp)=>{}); 返回这个新数组。更改变量名称以避免混淆。
  • 谢谢!这有帮助!
猜你喜欢
  • 2019-10-14
  • 2020-04-24
  • 2012-12-02
  • 1970-01-01
  • 2021-10-27
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多