首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将具有两个属性的对象数组简化为两个数组,每个属性对应一个数组?

如何将具有两个属性的对象数组简化为两个数组,每个属性对应一个数组?
EN

Stack Overflow用户
提问于 2021-11-28 20:56:05
回答 3查看 466关注 0票数 0

我有一个具有两个属性的对象数组:canaistopicos

代码语言:javascript
复制
 channel: Array(3)
    0: {canais: 'canal1', topicos: 'topico1'}
    1: {canais: 'canal2', topicos: 'topico2'}
    2: {canais: 'canal3', topicos: 'topico3'}

我想分裂成两个字符串数组,称为迦南和topicos:

代码语言:javascript
复制
canais : [ "canal1" , "canal2", "canal3" ];
topicos: [ "topico1" , "topico2", "topico3" ];
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-11-28 21:01:06

你能做到的

代码语言:javascript
复制
const canais = channel.map(item => item.canais)
const topicos = channel.map(item => item.topicos)
票数 3
EN

Stack Overflow用户

发布于 2021-11-28 21:04:36

您可以通过多种方式这样做:

  1. 将每个元素映射到一个2元素数组[canais, topicos],然后转到结果以获得两个数组(在这里original是您的数组):

const transpose = arr => arr.map((x,i) => arr.map(x => xi)) const迦南,topicos = transpose(original.map(a => a.canais,a.topicos))

还请参阅:Transposing a 2D-array in JavaScript,它是上面的transpose函数的起源.

  1. 使用forEach循环并累积:

const迦南= [] const topicos = [] original.forEach(el => { canais.push(el.canais) topicos.push(el.topicos) })

  1. 普通for循环并累加:

const allCanais = [] const allTopicos = [] for (const {迦南,topicos} of原){allCanais.push(迦南) allTopicos.push(topicos) }

  1. Map两次(首先提取所有el.canais,然后提取所有el.topicos),尽管这会对可能不需要的数据进行两次迭代。
票数 2
EN

Stack Overflow用户

发布于 2021-11-28 21:03:47

如果您需要它是动态的,您可以使用嵌套的for循环来遍历每个项,并根据键创建/添加数组,然后使用一个对象来存储每个值数组。

代码语言:javascript
复制
let channelNames = {};
for(let c of channel){
    for(let key in c){
        if(!channelNames[key])
            channelNames[key] = [];
        channelNames[key].push(i[key]);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70147391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档