Javascript 从字符串数组创建对象

Javascript 从字符串数组创建对象,javascript,Javascript,我的意见是 var resources = ["user-john","user-doe", "students-Milan"]; 我试图得到一个输出作为一个对象,如下所示 { user: ["john", "doe"], students: ["Milan"] } 我做错了什么 var-resources=[“用户john”、“用户doe”、“学生米兰”]; 设tempObj={} resources.forEach(o=>{ 设tempArr=o.split(“-”); if(

我的意见是

var resources = ["user-john","user-doe", "students-Milan"];
我试图得到一个输出作为一个对象,如下所示

{
  user: ["john", "doe"],
  students: ["Milan"]
}
我做错了什么

var-resources=[“用户john”、“用户doe”、“学生米兰”];
设tempObj={}
resources.forEach(o=>{
设tempArr=o.split(“-”);
if(tempObj[tempArr[0]]){
tempObj[tempArr[0]]=[…tempArr[1],tempArr[1]]
}否则{
tempObj[tempArr[0]]=[tempArr[1]]
}
})

console.log(tempObj)
在本部分中,您实际上需要:

resources.forEach(o => {
  let tempArr = o.split("-");
  if(tempObj[tempArr[0]]){
    tempObj[tempArr[0]] = [...tempObj[tempArr[0]], tempArr[1]];
  }else{
  tempObj[tempArr[0]] = [tempArr[1]]
  }
})

您可以使用
.push
方法代替
[…tempArr[1],tempArr[1]]

var-resources=[“用户john”、“用户doe”、“学生米兰”];
设tempObj={}
resources.forEach(o=>{
设tempArr=o.split(“-”);
if(tempObj[tempArr[0]]){
tempObj[tempArr[0]].推送(tempArr[1])
}否则{
tempObj[tempArr[0]]=[tempArr[1]]
}
})

log(tempObj)
您可以在这里使用
reduce
方法,将对象作为累加器值

var data=[“用户约翰”、“用户多伊”、“学生米兰”];
var结果=数据减少((r,e)=>{
让[key,value]=e.split('-');
r[key]=(r[key]| |[]).concat(值)
返回r;
}, {})
console.log(结果)
var-resources=[“用户john”、“用户doe”、“学生米兰”];
var tmp={};
资源。forEach(功能(e){
var a=e.split(“-”);
if(tmp[a[0]]==“未定义的类型”){
tmp[a[0]]=[];
tmp[a[0]].push(a[1]);
}否则{
tmp[a[0]].push(a[1]);
}
});

控制台日志(tmp)干净、现代的解决方案:

var-resources=[“用户john”、“用户doe”、“学生米兰”];
常量输出={}
resources.forEach(项目=>{
常量[键,值]=项.拆分('-')
输出[键]=[…输出[键]| |[],值]
})

log(输出)
您可以解构拆分的字符串,并构建一个数组作为值

var resources=[“用户约翰”、“用户多伊”、“学生米兰”],
结果=资源。减少(
(r,s)=>
((键,值)=>Object.assign(r,{[key]:[].concat(r[key]| |[],值)}))
(…s.split('-')),
{}
);
控制台日志(结果)