繁体   English   中英

如何循环通过 object - JavaScript

[英]How to loop through object - 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:...},
]
}

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

for (let i = 0; i < targetId.length; i++) {
if(targetId[i] === data.[property])
separateList.push(data.[property].value)
}

我想这样的事情也许应该这样做,但需要以某种方式通过 object 添加循环

arrays 的数组

您可以Array#map over targetId并从data中选择项目并使用.map()再次将值提取为数组

targetId.map(
  id => data[id].map(({value}) => value)
);

演示:

 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

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

演示:

 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()

targetId
    .filter(id => id in data)
    .map(id => data[id].map(({value}) => value))

演示:

 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM