将2个数组转换为数组对象?

时间:2015-10-23 02:32:46

标签: javascript jquery

var a = [ 'Child' , 'Adult'];
var b = [2,6];
var c = {}

for(var i=0; i<a.length; i++){
                c[a[i]] = b[i]
            }

document.getElementById('result').innerHTML = JSON.stringify(c, 0, 4);
<pre id="result"></pre>

以上循环产生

{
    "Child": 2,
    "Adult": 6
}

但如何制作像这样的重拍

[{"child":2},{"Adult":6}]

以后很容易让我循环。

7 个答案:

答案 0 :(得分:2)

var a = [ 'Child' , 'Adult'];
var b = [2,6];
var c = []

for(var i=0; i<a.length; i++){
                var o = {}
                o[a[i]] = b[i];
                c.push(o)
            }

如果您使用像Ramda这样的功能库,那么您可以: -

R.zipWith(R.createMapEntry,a,b);

答案 1 :(得分:1)

简单且程序化。

显然c应该是一个数组,根据你想要的输出来判断。 因此,在循环中,您只需使用正确的键和值创建一个对象,然后将其添加到数组c。

var a = ['Child', 'Adult'];
var b = [2,6];
var c = [];

for (var i = 0 ; i < a.length ; i++) {
  var key = a[i];
  var val = b[i];
  var obj = {};
  obj[key] = val;
  c[i] = obj;
}

document.getElementById('result').innerHTML = JSON.stringify(c, 0, 4);
<pre id="result"></pre>

更多功能与地图。

正如其他答案中所提到的:有更多以函数式编程为导向的方法。上面的代码尽可能简单,以帮助您学习。

您还可以执行以下操作:

var a = ['Child', 'Adult'];
var b = [2,6];

c = a.map(function(key,i) {
  var obj = {};
  obj[key] = b[i];
  return obj;
});

document.getElementById('result').innerHTML = JSON.stringify(c, 0, 4);
<pre id="result"></pre>

考虑到你必须使用索引访问数组b,我不会说这种方式更好。

使用zip和map更加实用。

更实用的方法是使用zip函数组合a和b,然后将其映射到新数组。

var a = ['Child', 'Adult'];
var b = [2,6];

function zip(arrays) {
  return arrays[0].map(function(_,i){
    return arrays.map(function(array){return array[i]})
  });
}

var c = zip([a,b]).map(function(obj) {
  var result = {};
  result[obj[0]] = obj[1];
  return result;
});

document.getElementById('result').innerHTML = JSON.stringify(c, 0, 4);
<pre id="result"></pre>

答案 2 :(得分:0)

您将var c设置为对象,但期望它是一个数组。尝试:

var a = [ 'Child' , 'Adult'];
var b = [2,6];
var c = []

for(var i=0; i<a.length; i++){

    var temp = {};
    temp[a[i]] = b[i];

    c.push( temp );
}

答案 3 :(得分:0)

这样的事情应该做。

var a = [ 'Child' , 'Adult'];
var b = [2,6];
var c = [];

for(var i=0; i<a.length; i++){
  var obj = {}; // create a temp object
  obj[a[i]] = b[i]; // fill the values 
  c.push(obj); // push it to c
}

答案 4 :(得分:0)

&#13;
&#13;
var a = [ 'Child' , 'Adult'];
var b = [2,6];
var c = [];

for(var i=0; i<a.length; i++){
                c[i] = {};
                c[i][a[i]] = b[i];
            }

document.getElementById('result').innerHTML = JSON.stringify(c, 0, 4);
&#13;
<pre id="result"></pre>
&#13;
&#13;
&#13;

答案 5 :(得分:0)

尝试使用Array.prototype.map(),将c移至回调中,为a

中的每个项目创建对象

&#13;
&#13;
var a = ["Child", "Adult"];
var b = [2, 6];

var arr = a.map(function(val,key) {
  var c = {};
  c[val] = b[key];
  return c
});



document.getElementById('result').innerHTML = JSON.stringify(arr, 0, 4);
&#13;
<pre id="result"></pre>
&#13;
&#13;
&#13;

答案 6 :(得分:0)

在firefox(和ES6或chrome中带有实验性JS标志的about:flags set)中,你可以做到这个整洁的小技巧:

var a = [ 'Child' , 'Adult'];
var b = [2,6];

a.map(  (a,i)=> a={[a]: b[i]}  ); // == [{"Child":2},{"Adult":6}]

(遗憾的是a=部分需要让它看起来不像功能体,但无论如何它都是无害的......

如果你不介意破坏阵列,那么阅读起来会更清晰:

a.map( a => a={[a]: b.shift()} );

我认为它比普通的vanilla更能完成这项任务,代码的代码比Ramda更少......