это (let {items} = user) строго то же самое, что сказать (user.items)? - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь прийти к ответу ниже по-другому.

Использование 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 не допускает внесения изменений в возвращаемый массив.

Я бы хотел знать, почему происходит вышеперечисленное.

1 Ответ

1 голос
/ 28 апреля 2020

Вы не видите изменения, потому что вы переназначаете локальную переменную вместо свойства 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;
});
...