将数组映射到对象数组
Mapping array to array of objects
我得到了一组这样的对象:
const defaultActors =
[
{
data: {name: "name1"}
},
{
data: {name: "name2"}
}
]
和一个像这样的简单数组:
const actorsToBeAdded = ["nameX", "nameY"]
有没有简单的方法可以得到这个:
const combinedActors = [
{
data: {name: "name1"}
},
{
data: {name: "name2"}
},
{
data: {name: "nameX"} //newly added
},
{
data: {name: "nameY"} //newly added
}
]
我正在使用 useState
并尝试像这样获取对象的组合数组:
setCombinedActors(
actorsToBeAdded.map((actor) =>
({
data: {name : actor} //data from [nameX, nameY] array
//also need to spread data from {name: "name1" ...} array
})
)
)
编辑:感谢您的回答。 Concat 确实会产生一个数组,但它是“直接”值和对象的数组,就像这样
["name1", "name2", {Object_with_data},{Object_with_data}]
有没有办法得到
[{Object_with_data},{Object_with_data}, {Object_with_data},{Object_with_data}]
或这个
["name1", "name2", "name3", "name4"]
?
我创建了沙箱:
https://codesandbox.io/s/epic-taussig-zeyev?file=/src/App.js
感谢有兴趣的人!
actorsToBeAdded.forEach(value=>{
defaultActors.push(
{data:{name:value}},
);
}
)
试试这个。
您可以使用 Array.prototype.concat
连接两个数组,例如:
setCombinedActors(
defaultActors.concat(
actorsToBeAdded.map(actor => ({ data: { name : actor } }))
)
)
此外,您可能只想添加仍不在 defaultActors
数组中的演员,为此您可以使用像这样的过滤器:
setCombinedActors(
defaultActors.concat(
actorsToBeAdded
.filter(actor => !defaultActors.some(({ data }) => data.name === actor))
.map(actor => ({ data: { name : actor } }))
)
)
如果您想全部转换为String
,正在回答编辑。
arr.map(elm => typeof elm === 'string' ? elm : elm.data.name)
否则,如果你想要对象。
arr.map(elm => typeof elm === 'string' ? { data: { name: elm } } : elm)
注意:假设数组的所有元素都是 String
或结构为 { data: { name: 'a string' } }
.
的对象
我得到了一组这样的对象:
const defaultActors =
[
{
data: {name: "name1"}
},
{
data: {name: "name2"}
}
]
和一个像这样的简单数组:
const actorsToBeAdded = ["nameX", "nameY"]
有没有简单的方法可以得到这个:
const combinedActors = [
{
data: {name: "name1"}
},
{
data: {name: "name2"}
},
{
data: {name: "nameX"} //newly added
},
{
data: {name: "nameY"} //newly added
}
]
我正在使用 useState
并尝试像这样获取对象的组合数组:
setCombinedActors(
actorsToBeAdded.map((actor) =>
({
data: {name : actor} //data from [nameX, nameY] array
//also need to spread data from {name: "name1" ...} array
})
)
)
编辑:感谢您的回答。 Concat 确实会产生一个数组,但它是“直接”值和对象的数组,就像这样
["name1", "name2", {Object_with_data},{Object_with_data}]
有没有办法得到
[{Object_with_data},{Object_with_data}, {Object_with_data},{Object_with_data}]
或这个
["name1", "name2", "name3", "name4"]
? 我创建了沙箱: https://codesandbox.io/s/epic-taussig-zeyev?file=/src/App.js
感谢有兴趣的人!
actorsToBeAdded.forEach(value=>{
defaultActors.push(
{data:{name:value}},
);
}
)
试试这个。
您可以使用 Array.prototype.concat
连接两个数组,例如:
setCombinedActors(
defaultActors.concat(
actorsToBeAdded.map(actor => ({ data: { name : actor } }))
)
)
此外,您可能只想添加仍不在 defaultActors
数组中的演员,为此您可以使用像这样的过滤器:
setCombinedActors(
defaultActors.concat(
actorsToBeAdded
.filter(actor => !defaultActors.some(({ data }) => data.name === actor))
.map(actor => ({ data: { name : actor } }))
)
)
如果您想全部转换为String
,正在回答编辑。
arr.map(elm => typeof elm === 'string' ? elm : elm.data.name)
否则,如果你想要对象。
arr.map(elm => typeof elm === 'string' ? { data: { name: elm } } : elm)
注意:假设数组的所有元素都是 String
或结构为 { data: { name: 'a string' } }
.