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}]
以后很容易让我循环。
答案 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函数组合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)
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;
答案 5 :(得分:0)
尝试使用Array.prototype.map()
,将c
移至回调中,为a
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;
答案 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更少......