如何解决如何使用 .map/.reduce 从对象返回映射
对象看起来像这样:
informations = {
addresses: {
0: {phone: 0},1: {phone: 1},2: {phone: 2},3: {phone: 3},4: {phone: 4},5: {phone: 5},},names: {
0: n0,1: n1,2: n2,3: n3,4: n4,5: n5,}
}
我怎样才能得到 [{phone: 0,name: n0},{phone:1,name: n1} .....{phone:5,name: n5}]
的结果?
我使用的是 .map
,但给了我“类型上不存在属性 'map'” 的错误。
有没有什么快速的方法来编写代码而不是使用 for() 循环?
解决方法
map
和 reduce
是数组函数,不是对象函数。无需先创建数组即可获得 iterate over an object 的唯一方法是 for...in
。如果你不介意创建一个数组,你可以使用 Object.entries
/keys
/values
,然后执行 reduce
,map
,forEach
,for...of
。
在这种情况下,数据处于相当愚蠢的状态,因为具有单调递增整数键的对象似乎被滥用为数组。您可以使用 Object.values
将这两个对象转换为数组,然后 "zip" 将两者一起 using map
(假设这些数组的长度相同):
const informations = { addresses: { 0: {phone: 0},1: {phone: 1},2: {phone: 2},3: {phone: 3},4: {phone: 4},5: {phone: 5},},names: { 0: "n0",1: "n1",2: "n2",3: "n3",4: "n4",5: "n5",} }
const addresses = Object.values(informations.addresses);
const names = Object.values(informations.names);
const result = addresses.map(({phone},i) => ({
phone,name: names[i]
}));
console.log(result);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。