我正在尝试根据现有数组创建一个新对象。我想创建一个显示在下面的新对象
{ 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'} ]
单词数组的作用是什么?我认为以下代码将起作用。
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;
});
您可以通过一个循环来满足您的需求。
@ aravindan-venkatesan给出的答案应该给您您想要的结果。但是重要的考虑因素:
[使用.map()
时javascript返回一个相同长度的数组,以及您告诉它在map()
内部的任何转换。
如果要创建一个全新的对象,请使用您自己的结构。尝试使用.reduce()
。这使您可以设置输入变量,即对象,数组或字符串。
然后循环遍历,并返回所需的内容,而不是旧数组的映射版本。
请参阅此处以获取更多详细信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce