【问题标题】:is (let { items } = user) strictly the same as saying (user.items)?(let { items } = user) 是否与说 (user.items) 完全相同?
【发布时间】: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


【解决方案1】:

您没有看到更改,因为您正在重新分配一个局部变量而不是 user.items 属性。看看稍微修改过的代码,希望它为什么不工作会很明显。

const newList = array.map(user => {
    // Instead of using destructuring assignment
    // let's manually do the same thing.
    //let { items } = user;
    let items = user.items;
    // Now items will be replaced by the result from map()
    items = items.map(item =>{
        return item + "!"
    });
    // user is returned without ever modifying user.items
    return user;
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2010-09-21
    • 2010-09-21
    • 2012-07-16
    • 1970-01-01
    相关资源
    最近更新 更多