将数组转换为键值对

5
我已经从嵌套循环中推入了不同的值到一个对象中,结果如下所示:

obj = ["blue", 1, "red", 4, "yellow", 2, "green", 7];

但我希望你能将其翻译成如下形式:
obj = [{"blue": 1}, {"red": 4}, {"yellow": 2}, {"green": 7}];

我需要手动构建这种语法吗,还是有更��的方法?
4个回答

3
使用简单的for循环。

var obj = ["blue", 1, "red", 4, "yellow", 2, "green", 7];

var res = [];

for (var i = 0; i < obj.length; i += 2) {
  var o = {};
  o[obj[i]] = obj[i + 1];
  res.push(o);
}

console.log(res);


一种使用 ES6 的解决方案,使用 Array.from() 方法。

let obj = ["blue", 1, "red", 4, "yellow", 2, "green", 7];

console.log(Array.from({ length: obj.length / 2 }, (_, i) => ({ [obj[2 * i]]: obj[2 * i + 1] })));


2
利用for循环实现以下结果:

var obj = ["blue", 1, "red", 4, "yellow", 2, "green", 7];

var newObj = []
for(var i = 0; i < obj.length; i+=2) {
  var temp = {};
  temp[obj[i]] = obj[i + 1];
  newObj.push(temp);
  
}
console.log(newObj);


0
一种方法是使用一个空的JSON对象数组初始化结果,然后通过迭代来填充这些对象。

var obj = ["blue", 1, "red", 4, "yellow", 2, "green", 7];

var result = Array.apply(null, Array(obj.length / 2)).map(i => ({}));
result.forEach((c, i, a) => (a[i][obj[2 * i]] = obj[2 * i + 1]));

console.log(result);


0

你可以使用这个

var obj = ["blue", 1, "red", 4, "yellow", 2, "green", 7];
  var newObj = [];
  var itemValue,itemName = '';
  $(obj).each(function(index, item){
    if(index % 2 == 0){
      if(itemName != ''){
        var newObjEle = {};
        newObjEle[itemName] = itemValue;
        newObj.push(newObjEle);
      }
      itemName = item;
    }
    else{
        itemValue = item
    }
  })
  console.log(newObj);

工作的fiddle


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