在 JavaScript 中将键数组和值数组合并到一个对象中

IT技术 javascript json object
2021-01-25 02:11:27

我有:

var keys = [ "height", "width" ];
var values = [ "12px", "24px" ];

我想把它转换成这个对象:

{ height: "12px", width: "24px" }

在 Python 中,有一个简单的 idiom dict(zip(keys,values))jQuery 或纯 JavaScript 中是否有类似的东西,或者我必须长期这样做吗?

6个回答

使用 Array 的最简单的 ES6 单行解决方案reduce

const keys = ['height', 'width'];
const values = ['12px', '24px'];
const merged = keys.reduce((obj, key, index) => ({ ...obj, [key]: values[index] }), {});
正确的现代版本
2021-03-26 02:11:27

简单的 JS 函数是:

function toObject(names, values) {
    var result = {};
    for (var i = 0; i < names.length; i++)
         result[names[i]] = values[i];
    return result;
}

当然,您实际上也可以实现 zip 等功能,因为 JS 支持高阶类型,这使得这些功能语言主义变得容易:D

@ user1927627 不,不会。它将只使用最后一次出现,正如人们所期望的那样。
2021-03-18 02:11:27
如果名称具有相同的键,则此功能将失败。
2021-03-23 02:11:27
帮助为多个数组值设置标题。问然后作为对象。值[0].宽度;var header= [ "height", "width" ]; var values[0] = [ "12px", "24px" ]; var values[1] = [ "14px", "33px" ]; /* 或 */ var header= [ "height", "width" ]; var values = [[ "12px", "24px" ], [ "14px", "33px" ]]; 任何的想法?
2021-03-27 02:11:27

使用 lodash。

_.zip 对象

例子

_.zipObject(['a', 'b'], [1, 2]);
// ➜ { 'a': 1, 'b': 2 }
这应该是公认的答案。自己滚动(就像在所有其他答案中一样)是浪费时间。这个来自 Underscore 的函数的原始名称(你也可以在旧版本的 Lodash 中找到)是_.object.
2021-04-12 02:11:27

作为替代解决方案,我认为尚未提及:

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

您可以使用map方法组合两个数组,然后使用Object.fromEntries.

var keys = ["height", "width"];
var values = ["12px", "24px"];

var array = keys.map((el, i) => {
  return [keys[i], values[i]];
});
// → [["height", "12px"], ["width", "24px"]]

var output = Object.fromEntries(array);
// → {height: "12px", width: "24px"}
console.log(output);