如何将二维数组转为含真实键值对的对象数组?JS问题求助
问题解决方法
你的问题出在separateObject函数的对象创建环节——你写的{ keys : obj[key] }会把字符串"keys"作为固定键名,而非使用循环中的key变量作为动态键名。
修复后的代码
只需要把对象里的keys改成[key](ES6计算属性名语法)即可:
var array = [["white", "goodness"], ["green", "grass"]]; var obj={}; for (var i=0; i<array.length;i++){ for (var z=0; z < 1; z++){ obj[array[i][z]] = array[i][z+1]; } } const separateObject = obj => { const res = []; const keys = Object.keys(obj); keys.forEach(key => { res.push({ [key]: obj[key] // 用[key]替代固定字符串keys }); }); return res; }; console.log(separateObject(obj)); // 输出: [{white: "goodness"}, {green: "grass"}]
更简洁的优化写法
完全可以跳过中间转成大对象的步骤,直接遍历原二维数组生成目标数组,代码更高效简洁:
var array = [["white", "goodness"], ["green", "grass"]]; const result = array.map(([key, value]) => ({ [key]: value })); console.log(result); // 输出: [{white: "goodness"}, {green: "grass"}]
这里用map遍历原数组,解构每个子数组的key和value,再通过计算属性名生成对应对象,一步完成转换。
内容的提问来源于stack exchange,提问作者Nikita
相关产品推荐
相关产品推荐

