JavaScript二维数组转对象,现有写法返回值不符合预期如何解决?
JavaScript二维数组转对象实现方案
原代码问题说明
你给出的代码存在两处明显逻辑缺陷:
- forEach遍历过程中没有收集reduce的返回值,所有计算结果直接被丢弃
- 函数内部没有定义存储最终结果的变量,无法明确返回值
原代码示例:
input = [[ 'Thundercats', '80s' ], [ 'The Powerpuff Girls', '90s' ], [ 'Sealab 2021', '00s' ]]; function objectify(array){ array.forEach(el=>{ el.reduce(function(result, item,index,array){ result[index] = item; return result; }, {}) }) return ??; } console.log(objectify(input))
修复后的实现方案
如果需求是将二维数组的每个子项第一个元素作为对象key,第二个元素作为对象value,可选择以下任意实现:
- forEach遍历实现
function objectify(array){ const result = {} array.forEach(([key, value]) => { result[key] = value }) return result }
- reduce实现
function objectify(array){ return array.reduce((acc, [key, value]) => { acc[key] = value return acc }, {}) }
- 单行最简实现(ES2019及以上版本支持)
Object.fromEntries是JS内置的专门用于将[key, value]格式的二维数组转换为对象的API,写法如下:
const obj = Object.fromEntries(input);
运行结果
所有上述实现调用objectify(input)后返回的结果统一为:
{ Thundercats: '80s', 'The Powerpuff Girls': '90s', 'Sealab 2021': '00s' }
内容的提问来源于stack exchange,提问作者A.Baes
相关产品推荐
相关产品推荐

