Javascript 如何将数组格式更改为对象格式?

Javascript 如何将数组格式更改为对象格式?,javascript,Javascript,如何使用javascript将数组更改为对象格式?谢谢 [ "16-282", "16-311", "16-320", "17-275", "17-276" ] 对象格式: [{ id: 16, Options: [282, 311, 320], }, { id: 17, Options: [275, 276], }] 我的代码: test()

如何使用javascript将数组更改为对象格式?谢谢

[ "16-282", "16-311", "16-320", "17-275", "17-276" ]
对象格式:

[{
    id: 16,
    Options: [282, 311, 320],
  },
  {
     id: 17,
     Options: [275, 276],
  }]
我的代码:

test() {
  var option = ["16-282", "16-311", "16-320", "17-275", "17-276"];


  var finalResult = option.map((item, index) => ({id: item, Options: item,  }));
  console.log(finalResult);
},

让我们从您的代码开始:

var finalResult = option.map((item, index) => ({id: item, Options: item,  }));
这里您正在使用
.map
。它将返回一个长度为
n
的数组,并带有解析输出


根据输出,您需要根据
-
之前的零件对值进行分组。这可以通过多种方式完成,但我将使用
for
,因为它很容易理解:

创意:

  • 创建一个对象以容纳组。对象和非数组作为对象是键值对结构。因此,您的groupId将是键,value将是要存储的值
  • 现在在
    选项
    数组上循环。
    • 对于每次迭代,使用连字符(
      -
      )拆分
      项。第一部分是你的关键,第二部分是你的价值
    • 检查
      组中是否存在此键。如果是,将当前值推送到
      选项
      数组
    • 如果不存在,则使用默认结构初始化它:
      {id:groupKey,选项:[groupValue]}
示例:

var选项=[“16-282”、“16-311”、“16-320”、“17-275”、“17-276”];
变量组={};
对于(变量i=0;i
您需要的是一个“groupBy”操作,使用id作为对象键,使用新对象作为值

使用数组#reduce()和映射的解决方案

var选项=[“16-282”、“16-311”、“16-320”、“17-275”、“17-276”];
常量组=选项。减少((m,c)=>{
常量[id,val]=c.split('-');
const obj=m.get(id)|{id,选项:[]};
对象选项推送(val);
返回m.set(id,obj)
},新地图)
console.log([…group.values()])
。作为控制台包装器{
最大高度:100%!重要;
排名:0

}
您能分享一下您的尝试吗?这个问题很直截了当。我承认这可能不是那么简单,因为你是我们中的少数。这就是为什么你的尝试是必要的。它告诉我们您的级别,并在此基础上,我们可以起草answer@charlietfl我觉得我最初的评论有点粗鲁。于是调低了音调。但在某种程度上,我的意思是每一个字。我记得我最初的日子,这些评论会对个人的思想产生一些影响。因此,我更喜欢把小细节解释为caveat@shuk您需要的是一个“groupBy”操作,使用id作为对象中的键。使用reduce()和Map@shuk的示例我在这里链接了一个可选的注释解决方案:(尽管上面建议的解决方案更好)@charlietfl@Edrich这个问题困扰了我很长时间,现在已经解决了。非常感谢你的帮助![固执己见]:如果我的键是字符串,我更喜欢使用对象而不是
.map
。如果我有复杂的结构作为键,那么
Map
对我来说比创建散列和使用对象更有意义。谢谢你的建议!