【发布时间】:2020-08-11 18:48:50
【问题描述】:
我试图以不同的方式得出以下答案。
使用let {items} = user 来解构而不是user.items。
但使用let {items} = user 不会返回更改后的原始数组(在项目中添加“!”)。
const array = [
{
username: "john",
team: "red",
score: 5,
items: ["ball", "book", "pen"]
},
{
username: "becky",
team: "blue",
score: 10,
items: ["tape", "backpack", "pen"]
},
{
username: "susy",
team: "red",
score: 55,
items: ["ball", "eraser", "pen"]
},
{
username: "tyson",
team: "green",
score: 1,
items: ["book", "pen"]
},
];
方法 1:
它不会更改array 中的项目,并最终返回整个数组而不更改。
// BONUS:
// create a new list with all user information,
// but add "!" to the end of each items they own.
const newList = array.map(user => {
let { items } = user;
items = items.map(item => {
return item + "!"
});
return user;
});
方法 2:
不过,这种方式似乎行得通。
const answer = array.map(user => {
user.items = user.items.map(item => {
return item + "!"
});
return user;
});
这是我的观察:
user.items是在array中抓取项目,然后返回带有更改的数组,但是let { items } = user不允许对返回的数组实施更改。
我想知道为什么会发生上述情况。
【问题讨论】:
-
重新分配
user.items与重新分配items不同...您需要将user.items = items添加到第一个代码 -
解构只是从属性分配变量的简写,它不会使变量成为对属性的引用。
标签: javascript arrays object nested array.prototype.map