首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何遍历object - JavaScript

问如何遍历object - JavaScript
EN

Stack Overflow用户
提问于 2021-02-04 18:15:48
回答 1查看 57关注 0票数 1
代码语言:javascript
复制
targetId = [313,309,307,318,317]

data={
313:[{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
],
303:[{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
],
309:[{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
],
307:[{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
],
322:[{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
],
318:[{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
],
317:[{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
],
311:[{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
{time:..., value:...},
]
}

有人能帮帮我吗?所以我需要遍历数据对象,如果数据属性与targetId列表中的一个数字匹配,那么我需要从该属性中提取所有值并将它们存储在单独的列表中。

代码语言:javascript
复制
for (let i = 0; i < targetId.length; i++) {
if(targetId[i] === data.[property])
separateList.push(data.[property].value)
}

我猜像这样的东西应该可以做到,但需要以某种方式添加通过对象的循环

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-04 18:28:24

数组的数组

您可以在targetId上使用Array#map,并从data和extract values as an array again using .map()中挑选项目

代码语言:javascript
复制
targetId.map(
  id => data[id].map(({value}) => value)
);

演示:

​

代码语言:javascript
复制
const targetId = [313,309,307,318,317]

const data = {
  313:[
    {time:3131, value:3131},
    {time:3132, value:3132},
    {time:3133, value:3133},
    {time:3134, value:3134},
  ],
  303:[
    {time:3031, value:3031},
    {time:3032, value:3032},
    {time:3033, value:3033},
    {time:3034, value:3034},
  ],
  309:[
    {time:3091, value:3091},
    {time:3092, value:3092},
    {time:3093, value:3093},
    {time:3094, value:3094},
  ],
  307:[
    {time:3071, value:3071},
    {time:3072, value:3072},
    {time:3073, value:3073},
    {time:3074, value:3074},
  ],
  322:[
    {time:3221, value:3221},
    {time:3222, value:3222},
    {time:3223, value:3223},
    {time:3224, value:3224},
  ],
  318:[
    {time:3181, value:3181},
    {time:3182, value:3182},
    {time:3183, value:3183},
    {time:3184, value:3184},
  ],
  317:[
    {time:3171, value:3171},
    {time:3172, value:3172},
    {time:3173, value:3173},
    {time:3174, value:3174},
  ],
  311:[
    {time:3111, value:3111},
    {time:3112, value:3112},
    {time:3113, value:3113},
    {time:3114, value:3114},
  ]
}

const result = targetId.map(
  id => data[id].map(({value}) => value)
);
console.log(result);

​

单数组

如果需要单个值数组,而不是数组数组,那么可以使用Array#flatMap

代码语言:javascript
复制
targetId.flatMap(
  id => data[id].map(({value}) => value)
);

演示:

​

代码语言:javascript
复制
const targetId = [313,309,307,318,317]

const data = {
  313:[
    {time:3131, value:3131},
    {time:3132, value:3132},
    {time:3133, value:3133},
    {time:3134, value:3134},
  ],
  303:[
    {time:3031, value:3031},
    {time:3032, value:3032},
    {time:3033, value:3033},
    {time:3034, value:3034},
  ],
  309:[
    {time:3091, value:3091},
    {time:3092, value:3092},
    {time:3093, value:3093},
    {time:3094, value:3094},
  ],
  307:[
    {time:3071, value:3071},
    {time:3072, value:3072},
    {time:3073, value:3073},
    {time:3074, value:3074},
  ],
  322:[
    {time:3221, value:3221},
    {time:3222, value:3222},
    {time:3223, value:3223},
    {time:3224, value:3224},
  ],
  318:[
    {time:3181, value:3181},
    {time:3182, value:3182},
    {time:3183, value:3183},
    {time:3184, value:3184},
  ],
  317:[
    {time:3171, value:3171},
    {time:3172, value:3172},
    {time:3173, value:3173},
    {time:3174, value:3174},
  ],
  311:[
    {time:3111, value:3111},
    {time:3112, value:3112},
    {time:3113, value:3113},
    {time:3114, value:3114},
  ]
}

const result = targetId.flatMap(
  id => data[id].map(({value}) => value)
);
console.log(result);

​

仅现有结果

如果targetId中可能有不在data中的项目,那么您可以先使用Array#filter,然后使用.map()/.flatMap()

代码语言:javascript
复制
targetId
    .filter(id => id in data)
    .map(id => data[id].map(({value}) => value))

演示:

​

代码语言:javascript
复制
const targetId = [313,309, 9001, 307,318,317, 42]

const data = {
  313:[
    {time:3131, value:3131},
    {time:3132, value:3132},
    {time:3133, value:3133},
    {time:3134, value:3134},
  ],
  303:[
    {time:3031, value:3031},
    {time:3032, value:3032},
    {time:3033, value:3033},
    {time:3034, value:3034},
  ],
  309:[
    {time:3091, value:3091},
    {time:3092, value:3092},
    {time:3093, value:3093},
    {time:3094, value:3094},
  ],
  307:[
    {time:3071, value:3071},
    {time:3072, value:3072},
    {time:3073, value:3073},
    {time:3074, value:3074},
  ],
  322:[
    {time:3221, value:3221},
    {time:3222, value:3222},
    {time:3223, value:3223},
    {time:3224, value:3224},
  ],
  318:[
    {time:3181, value:3181},
    {time:3182, value:3182},
    {time:3183, value:3183},
    {time:3184, value:3184},
  ],
  317:[
    {time:3171, value:3171},
    {time:3172, value:3172},
    {time:3173, value:3173},
    {time:3174, value:3174},
  ],
  311:[
    {time:3111, value:3111},
    {time:3112, value:3112},
    {time:3113, value:3113},
    {time:3114, value:3114},
  ]
}

const result = targetId
  .filter(id => id in data)
  .map(id => data[id].map(({value}) => value));
console.log(result);

​

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66043557

复制
相关文章

相似问题

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