在JavaScript中将平面数组[k1,v1,k2,v2]转换为对象{k1:v1,k2:v2}?

在JavaScript中将平面数组[k1,v1,k2,v2]转换为对象{k1:v1,k2:v2}?,javascript,arrays,hash,Javascript,Arrays,Hash,javascript中有没有一种简单的方法可以将平面数组转换成一个对象,其中数组的偶数索引成员作为属性,奇数索引成员作为对应的值(Anagus到ruby的哈希[*array]) 例如,如果我有: [ 'a', 'b', 'c', 'd', 'e', 'f' ] 那么我想要这个: { 'a': 'b', 'c': 'd', 'e': 'f' } 到目前为止,我提出的最好的建议似乎比必须的更冗长: var arr = [ 'a', 'b', 'c', 'd', 'e', 'f' ]; var o

javascript中有没有一种简单的方法可以将平面数组转换成一个对象,其中数组的偶数索引成员作为属性,奇数索引成员作为对应的值(Anagus到ruby的
哈希[*array]

例如,如果我有:

[ 'a', 'b', 'c', 'd', 'e', 'f' ]
那么我想要这个:

{ 'a': 'b', 'c': 'd', 'e': 'f' }
到目前为止,我提出的最好的建议似乎比必须的更冗长:

var arr = [ 'a', 'b', 'c', 'd', 'e', 'f' ];
var obj = {};
for (var i = 0, len = arr.length; i < len; i += 2) {
    obj[arr[i]] = arr[i + 1];
}
// obj => { 'a': 'b', 'c': 'd', 'e': 'f' }
var arr=['a','b','c','d','e','f'];
var obj={};
对于(变量i=0,len=arr.length;i{a':'b','c':'d','e':'f'}
有没有更好、更简洁、更优雅的方法?(或者我最近用ruby编程太多了?)


我正在寻找一个普通javascript的答案,但如果使用
undercore.js
jQuery
,是否有更好的方法来实现这一点,我也很感兴趣。性能并不是一个真正的问题。

非常确定这会起作用,而且会更短:

var arr = [ 'a', 'b', 'c', 'd', 'e', 'f' ];
var obj = {};
while (arr.length) {
    obj[arr.shift()] = arr.shift();
}

请参阅。

如果需要多次,还可以向阵列添加方法。原型:

Array.prototype.to_object = function () {
  var obj = {};
  for(var i = 0; i < this.length; i += 2) {
    obj[this[i]] = this[i + 1]; 
  }
  return obj
};

var a = [ 'a', 'b', 'c', 'd', 'e', 'f' ];

a.to_object();    // => { 'a': 'b', 'c': 'd', 'e': 'f' }
Array.prototype.to_object=函数(){
var obj={};
对于(变量i=0;i{'a':'b','c':'d','e':'f'}

您可以首先将数组分为两组:

[['a', 'b'], ['c', 'd'], ['e', 'f']]
因此,这是一种有效的格式,可供使用,它将为您构建对象:

const chunk=(arr,size)=>arr.length?[arr.slice(0,size),…块(arr.slice(size),size)]:[];
常数arr=['a','b','c','d','e','f'];
const res=Object.fromEntries(chunk(arr,2));

console.log(res);//{a:“b”,c:“d”,e:“f”}
您可以创建自己的函数,那么它很短:
var obj=transform(arr);)我觉得这很简洁,你说得对。你提供的循环是正确的方法。是的,你拥有的是最佳的。除了你的循环中断之外,如果你的arr有奇数个元素,你所做的看起来很好;就像已经建议的那样,用一个函数来包装它。但是,不能保证速度。我喜欢这个!但您可能需要注意的是,这会消耗原始数组,因此只有在您不关心原始数组的情况下,它才起作用。从字符角度看,它较短,但它确实是最佳解决方案吗?一个时代的问题…@ChaosPandion,这取决于你如何定义最优。“optimizatoin”我正在寻找一个简洁易读的版本,这适合我;而(k=arr.shift(),v=arr.shift()){obj[k]=v;}
,它甚至可以处理奇数个元素(忽略最后一个)。
[['a', 'b'], ['c', 'd'], ['e', 'f']]