如何将CSV加载的键数组与值数组转为单个对象?
解决方法:将两个数组转化为单个键值对对象
嘿,我懂你的困扰——你现在用map得到了三个重复的对象,这是因为map会遍历arr2的每一个元素(一共3项),每次都返回同一个包含所有值的对象,自然就生成了重复的数组。其实不用写循环,有几个非常简洁的方法能直接得到你想要的单个对象:
方法1:使用Object.fromEntries(最直观)
Object.fromEntries可以把键值对数组直接转化为对象,我们只需要先把arr(键)和arr2(值)配对成键值对数组就行:
var arr = [ "Client", "ActType", "CallRepType"]; var arr2 = [ "ECF", "Meeting", "Call Report"]; var myobj = Object.fromEntries(arr.map((key, index) => [key, arr2[index]])); console.log(myobj); // 输出:{ Client: 'ECF', ActType: 'Meeting', CallRepType: 'Call Report' }
这里arr.map会遍历每个键,同时取arr2对应索引的值,生成[[Client, ECF], [ActType, Meeting], ...]这样的结构,再交给Object.fromEntries转成对象。
方法2:使用Array.reduce(简洁且兼容性好)
如果你需要兼容一些不支持Object.fromEntries的旧环境,reduce是个不错的选择,写法也很紧凑:
var myobj = arr.reduce((result, key, index) => { result[key] = arr2[index]; return result; }, {});
这个逻辑是从空对象{}开始,逐个把arr里的键和arr2对应的值添加到结果对象里,最后返回完整的对象。
为什么原来的代码会重复?
你之前的arr2.map(...)会遍历arr2的每一项(三次),每次都返回{'Client': arr2[0], ...}这个完全一样的对象,所以最终得到的是包含三个相同对象的数组。而你要的是单个对象,根本不需要用map(它的作用是生成数组),用上面两种方法直接生成对象就好啦~
内容的提问来源于stack exchange,提问作者MattE
相关产品推荐
相关产品推荐

