【发布时间】:2018-04-27 20:28:16
【问题描述】:
我有两个由字符串组成的数组
["25","36","32"] 和 ["GradeA", "GradeB", "GradeC"]
我想将它们合并在一起,并希望生成类似这样的 JSON 字符串:
{"GradeA" : "25", "GradeB" : "36", "GradeC": "32"}
如何在 js 中做到这一点?
【问题讨论】:
标签: javascript arrays json merge add
我有两个由字符串组成的数组
["25","36","32"] 和 ["GradeA", "GradeB", "GradeC"]
我想将它们合并在一起,并希望生成类似这样的 JSON 字符串:
{"GradeA" : "25", "GradeB" : "36", "GradeC": "32"}
如何在 js 中做到这一点?
【问题讨论】:
标签: javascript arrays json merge add
另外 2 美分我给你它的 forEach 循环版本。这是考虑到每个数组将是 1 对 1 并以适当的顺序排列。
var grade = ["GradeA", "GradeB", "GradeC"];
var number = ["25","36","32"];
var obj = {};
grade.forEach(function(x, i){
obj[x] = number[i];
});
console.log(JSON.stringify(obj));
【讨论】:
以下代码将给出您预期的输出:
var arr1 = [25,36,32] ;
var arr2 = ["GradeA", "GradeB", "GradeC"];
var gradeObj = {};
for(var i = 0;i<arr2.length;i++){
gradeObj[arr2[i]] = arr1[i];
}
console.log(JSON.stringify(gradeObj));
【讨论】:
这样试试
var keys =["GradeA", "GradeB", "GradeC"];
var values= ["25","36","32"];
var obj = {};
for(var i=0; i< keys.length; i++){
if(values.length>i+1){
obj[keys[i]] = values[i];
}else{
obj[keys[i]] = null;
}
}
console.log(obj);
【讨论】:
使用 ES6 reduce:
{
const a = ["25","36","32"];
const b = ["GradeA", "GradeB", "GradeC"];
const merge = (keys, values) => keys.reduce(
(obj, key, i) => (obj[key] = values[i], obj),
{}
);
const json = JSON.stringify(
merge(b, a)
);
console.log(json);
}
与原生Reflect API:
{
const a = ["25","36","32"];
const b = ["GradeA", "GradeB", "GradeC"];
const merge = (keys, values) => keys.reduce(
(obj, key, i) => Reflect.set(obj, key, values[i]) && obj,
{}
);
const json = JSON.stringify(
merge(b, a)
);
console.log(json);
}
【讨论】:
使用Array#reduce 和Object#assign 在每次迭代中向对象添加属性及其值:
const keys = ["GradeA", "GradeB", "GradeC"];
const values = ["25","36","32"];
const result = keys.reduce((obj, key, i) => Object.assign(obj, { [key]: values[i] }), {});
console.log(result);
使用Array#map,创建一系列对象,每个对象都有一个属性,然后用Object#assign将它们组合成一个对象,然后传播:
const keys = ["GradeA", "GradeB", "GradeC"];
const values = ["25","36","32"];
const result = Object.assign(...keys.map((key, i) => ({ [key]: values[i] })));
console.log(result);
【讨论】:
试试 ES6 Destructuring Assignment:
var obj = {};
var arr1 = ["25","36","32"];
var arr2 = ["GradeA", "GradeB", "GradeC"];
function f([...val1], [...val2]) {
for (var i in val1) {
obj[val1[i]] = val2[i];
}
}
f(arr2, arr1);
console.log(obj);
【讨论】: