将键数组和值数组合并到Javascript中的对象中

its*_*dok 25 javascript idioms

我有:

var keys = [ "height", "width" ];
var values = [ "12px", "24px" ];
Run Code Online (Sandbox Code Playgroud)

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

{ height: "12px", width: "24px" }
Run Code Online (Sandbox Code Playgroud)

在Python中,有一个简单的习语dict(zip(keys,values)).在jQuery或普通的Javascript中是否有类似的东西,或者我必须做很长的事情吗?

oll*_*iej 20

简单的JS功能是:

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

当然,您也可以实现像zip等功能,因为JS支持更高阶的类型,这使得这些功能语言易于使用:D

  • 那么漫长的道路,然后:( (3认同)

ang*_*wan 18

使用lodash.

_.zipObject

_.zipObject(['a', 'b'], [1, 2]);
// ? { 'a': 1, 'b': 2 }
Run Code Online (Sandbox Code Playgroud)


Yii*_*iin 14

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

const keys = ['height', 'width'];
const values = ['12px', '24px'];
const merged = keys.reduce((obj, key, index) => ({ ...obj, [key]: values[index] }), {});
Run Code Online (Sandbox Code Playgroud)


Syl*_*oux 10

作为替代解决方案,我还没有提到:

  var result = {};
  keys.forEach((key, idx) => result[key] = values[idx]);
Run Code Online (Sandbox Code Playgroud)


Pen*_*Liu 9

您可以使用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);
Run Code Online (Sandbox Code Playgroud)


Mat*_*zer 6

考虑到不变性的函数式方法:

const zipObj = xs => ys => xs.reduce( (obj, x, i) => ({ ...obj, [x]: ys[i] }), {})

const arr1 = ['a', 'b', 'c', 'd']
const arr2 = ['e', 'f', 'g', 'h']

const obj = zipObj (arr1) (arr2) 

console.log (obj)
Run Code Online (Sandbox Code Playgroud)