Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数组和对象转换为自定义对象_Javascript_Node.js_Arrays_Reactjs_Vue.js - Fatal编程技术网

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也是一个数组。

它可以工作,谢谢!!