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

59

我有:

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

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

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

在Python中,有一个简单的习语dict(zip(keys,values))。在jQuery或纯JavaScript中是否有类似的东西,还是我必须走一条漫长的路?

使用underscore.js的同一个问题:如何使用underscore将两个键值数组合并为一个对象 - Sebastian Simon
14个回答

1
function combineObject( keys, values)
{
    var obj = {};
    if ( keys.length != values.length)
       return null;
    for (var index in keys)
        obj[keys[index]] = values[index];
     return obj;
};


var your_obj = combine( your_keys, your_values);

嘿,我看到你已经修复了它,所以删除了注释,然后你回应了——异步对话万岁:D你还应该避免使用new Object,因为Object可能会被更改,但{}是使用原始Object构造函数规定的。 - olliej
该函数仍然不正确。combineObject(["height", "width"], ["12px", "24px"]).height 错误地返回了"24px"。 - Simon Lieschke
谢谢,我已经根据您的评论进行了修复,但我不确定这是否会成为一个问题,因为一旦有人更改对象,那么可能最好将其隐含在所有对象上。 - Artem Barger

1
这是一个可以将嵌套数组转换为多个键值对象数组的方法。

var keys = [
  ['#000000', '#FFFFFF'],
  ['#FFFF00', '#00FF00', '#00FFFF', '#0000FF'],
];
var values = [
  ['Black', 'White'],
  ['Yellow', 'Green', 'Cyan', 'Blue'],
];
const zipObj = xs => ys => xs.reduce( (obj, x, i) => ({ ...obj, [x]: ys[i] }), {})
var array = keys.map((el, i) => zipObj (keys[i]) (values[i]));

console.log(array);

输出为。
[
  {
    "#000000": "Black",
    "#FFFFFF": "White"
  },
  {
    "#FFFF00": "Yellow",
    "#00FF00": "Green",
    "#00FFFF": "Cyan",
    "#0000FF": "Blue"
  }
]

0
提供一个使用for...of循环的解决方案。

var keys = ["height", "width"];
var values = ["12px", "24px"];
const result = {};
for (let [index, key] of keys.entries())
  result[key] = values[index];
console.log(result);

You can also use a library like ramda which has zipObj function. Example:

const keys = ["height", "width"];
const values = ["12px", "24px"];
const result = R.zipObj(keys, values);
console.log(result);

-1
jQuery-Utils 项目中,ArrayUtils 模块实现了 zip 函数。
//...
zip: function(object, object2, iterator) {
    var output = [];
    var iterator = iterator || dummy;
        $.each(object, function(idx, i){
        if (object2[idx]) { output.push([i, object2[idx]]); }
    });
    return output;
}
//...

2
嗯,那么你对元组数组要做什么? - itsadok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接