Javascript 将数组和对象转换为自定义对象
我想写一个函数来传输这些对象Javascript 将数组和对象转换为自定义对象,javascript,node.js,arrays,reactjs,vue.js,Javascript,Node.js,Arrays,Reactjs,Vue.js,我想写一个函数来传输这些对象 const input1 = ["monkey","bananas"]; const input2 = { { id: 1, name: "monkey.play", }, { id: 2, name: "monkey.run", }, { id: 3, name: "bananas.eat",
const input1 = ["monkey","bananas"];
const input2 = {
{
id: 1,
name: "monkey.play",
},
{
id: 2,
name: "monkey.run",
},
{
id: 3,
name: "bananas.eat",
},
};
像那样
const output = [
{
name: "monkey",
actions: ["play","run"],
},
{
name: "bananas",
actions: ["eat"],
},
];
我尝试使用Array.reduce,但我不知道如何渲染它。如果有人对此有任何后见之明,我想使用postid合并两个输入,那么我可以使用map循环或reduce,如果有人能帮助我这样做,我将非常感激,而且如果您有任何reduce/map教程,首先,您的
input2
对象的结构不正确。您需要使用方括号而不是大括号
现在,您可以通过拆分name
字段并使用第一部分作为本地“name”,第二部分作为“action”来减少每个项目。在减少时,可以通过在现有(或新)数组上使用扩展运算符连接来构建操作列表。最后,将新对象还原并提取值
const输入=[
{id:1,名字:“猴子。玩”},
{id:2,名称:“monkey.run”},
{id:3,名字:“香蕉。吃”}
];
const-ouptut=Object.values(input.reduce((acc,{id,name})=>
(([[u name,[u action])=>
({
…acc,
[姓名]:{
…acc[_name],
姓名:_name,
行动:[…(acc[_name]?.行动| |[]),_行动]
}
}))
(name.split(/\./),{});
控制台日志(ouptut)代码>
.as控制台包装{top:0;max height:100%!important;}
这里是另一种方法,只需在两个输入上循环。请注意,您的第二个输入也需要是一个数组
通过拆分字符串,可以检查名称是否匹配,并将值传递给操作
constinput1=[“猴子”,“香蕉”];
常量输入2=[
{
id:1,
名称:“猴子,玩”,
},
{
id:2,
名称:“猴子,快跑”,
},
{
id:3,
名称:“香蕉,吃”,
},
];
const output=input1.map(inputName=>{
//创建新的对象结构
常量对象={
名称:空,
行动:[]
}
//循环第二个输入,拆分字符串
input2.forEach(操作=>{
常量inputAction=action.name.split('.'))
//检查第一个字符串是否与input1匹配,并通过索引将值推入actions数组
if(inputAction[0]==inputName)对象操作推送(inputAction[1])
})
obj.name=inputName//将名称分配给对象
返回obj
})
console.log(输出)
已提供答案的更清晰替代方案:
const output = input1.map(name => ({
name,
actions: input2.filter(obj =>
obj.name.split('.')[0] === name)
.map(obj => obj.name.split('.')[1])
}));
假设input2也是一个数组。它可以工作,谢谢!!