从键数组和值数组创建对象

新手上路,请多包涵

我有两个数组: newParamArrparamVal

newParamArr 数组中的示例值: [ "Name", "Age", "Email" ]

paramVal 数组中的示例值: [ "Jon", 15, "jon@gmail.com" ]

我需要创建一个 JavaScript 对象,将数组中的所有项目放在同一个对象中。例如 { [newParamArr[0]]: paramVal[0], [newParamArr[1]]: paramVal[1], ... }

在这种情况下,结果应该是 { Name: "Jon", "Age": 15, "Email": "jon@gmail.com" }

两个数组的长度始终相同,但数组的长度可以增加或减少。这意味着 newParamArr.length === paramVal.length 将永远成立。

以下帖子均无法帮助回答我的问题:

用于创建 JSON 对象的 Javascript 递归

递归循环对象以构建属性列表

原文由 user6535476 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 190
2 个回答
 var keys = ['foo', 'bar', 'baz'];
var values = [11, 22, 33]

var result = {};
keys.forEach((key, i) => result[key] = values[i]);
console.log(result);

或者,您可以使用 Object.assign

 result = Object.assign(...keys.map((k, i) => ({[k]: values[i]})))

或对象传播语法(ES2018):

 result = keys.reduce((o, k, i) => ({...o, [k]: values[i]}), {})

Object.fromEntries (ES2019):

 Object.fromEntries(keys.map((_, i) => [keys[i], values[i]]))

如果您使用的是 lodash,那么 _.zipObject 正是用于此类事物的。

原文由 georg 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 ECMAScript2015:

 const obj = newParamArr.reduce((obj, value, index) => {
    obj[value] = paramArr[index];
    return obj;
}, {});

(编辑)以前误解了 OP 想要一个数组:

 const arr = newParamArr.map((value, index) => ({[value]: paramArr[index]}))

原文由 craigmichaelmartin 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题