Как создать новый объект на основе массива и другого объекта? - PullRequest
1 голос
/ 16 марта 2020

Я пытаюсь создать новый объект на основе существующего массива. Я хочу создать новый объект, показанный ниже

{ jack: 'jack', content: 'ocean'},
{ marie: 'marie', content: 'pond'},
{ james: 'james', content: 'fish biscuit'},
{paul: 'paul', content: 'cake'}

const words = ['jack','marie','james','paul']

const myUsers = [
    { name: 'jack', likes: 'ocean' },
    { name: 'marie', likes: 'pond' },
    { name: 'james', likes: 'fish biscuits' },
    { name: 'paul', likes: 'cake' }
]

const usersByLikes = words.map(word => {
    const container = {};
    

    container[word] = myUsers.map(user => user.name);
    container.content = myUsers[0].likes;

    return container;
})

Я не получаю правильный объект, но вместо этого он возвращает список.

[ { jack: [ 'shark', 'turtle', 'otter' ], content: 'ocean'}, { marie: [ 'shark', 'turtle', 'otter' ], content: 'ocean' }, { james: [ 'shark', 'turtle', 'otter' ], content: 'ocean' }, { paul: [ 'shark', 'turtle', 'otter' ], content: 'ocean'} ]

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Ответ @ aravindan-venkatesan должен дать вам результат, который вы ищете. Однако важно учитывать:

При использовании .map() javascript возвращает массив той же длины с любыми преобразованиями, которые вы указали, внутри map().

Если вы хотите создать новый объект, собственного строительства. Попробуйте использовать .reduce(). Это позволяет вам установить входную переменную, то есть: объект, массив или строку.

Затем l oop over и вернуть именно то, что вы хотите, а не отображенную версию старого массива.

Подробнее см. Здесь:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

1 голос
/ 16 марта 2020

Какова роль массива слов? Я думаю, что приведенный ниже код будет работать.

const result = myUsers.map(user => ({
[user.name]: user.name,
content:  user.likes
}));
console.log('result', result);

В случае, если вы хотите отфильтровать пользователей в массив слов, то ниже решение будет работать для вас.

const result = myUsers.filter(user => {
if (words.includes(user.name)) {
return ({
  [user.name]: user.name,
  content:  user.likes
})
}
return false;
});

Вы можете достичь нужно с одним л oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...