用我们自己的键将两个数组作为json对象推送

时间:2018-08-07 12:51:35

标签: javascript arrays json

我需要这样做

var a1= ["a","b","c","d","e","f"]
var a2 = [1,2,3,4,5,6]

所需格式为

js = [
    {key = "a", val=1}
    {key = "b", val=2}
    {key = "c", val=3}
    {key = "d", val=4}
    {key = "e", val=5}
    {key = "f", val=6}
]

我尝试过这样的事情

for (var i = 0; i < a1.length; i++) {
    for (var j = 0; j <= i; j++) {
        var obj = {};
        if (i == j) {
            obj.key = a1[i];
            obj.value = a2[j];
            js.push(obj);
        }
    }
}

我无法获得所需的输出。谁能帮我吗?

重获

6 个答案:

答案 0 :(得分:4)

如果两个数组的长度始终相同,则可以使用Array#map将它们组合在一起:

function arraysToObject(keyArr, valArr) {
  if(keyArr.length !== valArr.length) throw "Arrays must be of same length";
  else return keyArr.map((e,i) => {
    return {key:e, val:valArr[i]};
  });
}

let a1 = ["a", "b", "c", "d", "e", "f"]
let a2 = [1, 2, 3, 4, 5, 6]

let a3 = ["a", "b", "c", "d", "e", "f", "g"];
let a4 = [1, 2, 3, 4, 5, 6];

console.log(JSON.stringify(arraysToObject(a1, a2))); // runs fine
console.log(arraysToObject(a3, a4)); // throws an error
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:2)

如果您想使用ES6进行操作,则可以使用Array#map进行单线操作:

var a1 = ['a', 'b', 'c', 'd', 'e', 'f']
var a2 = [1, 2, 3, 4, 5, 6]

var res = a1.map((key, index) => ({key, val: a2[index]}));
console.log(res);

答案 2 :(得分:1)

您只需要一个循环,因为a1a2具有相同的长度。试试:

var js= [];
for(var i=0; i<a1.length;i++){ 
    var obj = {};
    obj.key = a1[i];
    obj.value = a2[i];
    js.push(obj);
}

答案 3 :(得分:1)

您还可以使用Array.prototype.reduce()Array.prototype.concat()获得所需的结果。

演示

^XA^JUS^XZ
const a1 = ["a", "b", "c", "d", "e", "f"],
      a2 = [1, 2, 3, 4, 5, 6];
      
let result = a1.reduce((r,v,i) => r.concat({key:v,val:a2[i]}), []);

console.log(result);

  

使用Destructuring_assignment

.as-console-wrapper {max-height: 100% !important;top: 0;}
const a1 = ["a", "b", "c", "d", "e", "f"],
      a2 = [1, 2, 3, 4, 5, 6];
      
let result = a1.reduce((r,v,i) => [...r,{key:v,val:a2[i]}], []);

console.log(result);

答案 4 :(得分:0)

var a1= ['a','b','c','d','e','f']
var a2 = [1,2,3,4,5,6]

var js = a1.map( ( key, index ) => { 
  
  return ( {
    key : key,
    value : a2[index],
  } );
  
} );

console.log(JSON.stringify(js))

答案 5 :(得分:0)

您可以使用Array.prototype.map汇总所需的输出:

var a1= ['a','b','c','d','e','f'];
var a2 = [1,2,3,4,5,6];

var js = a1.map((k, i) => ({key: k, val: a2[i]}));

console.log(js);