我得到了这样的对象数组:
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
感谢任何有兴趣的人!
您可以使用Array.prototype.concat
如下方式连接两个数组:
setCombinedActors(
defaultActors.concat(
actorsToBeAdded.map(actor => ({ data: { name : actor } }))
)
)
另外,您可能只想添加仍不在defaultActors
数组中的actor ,为此可以使用如下过滤器:
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' } }
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句