【发布时间】:2018-05-25 21:12:54
【问题描述】:
所以我从一个 API 中获得了这个非常复杂的数组,其中包含许多带有对象等的嵌套数组。它看起来像这样:
public data: any[] = [
{
language: 'Dutch',
sources: [
{
source: 'De Redactie',
channels: [
{ channel: 'binnenland', value: false },
{ channel: 'buitenland', value: false },
{ channel: 'sport', value: false },
{ channel: 'cultuur en media', value: false },
{ channel: 'politiek', value: false },
{ channel: 'financien', value: false }
]
},
{
source: 'Tweakers',
channels: [
{ channel: 'hardware', value: false },
{ channel: 'software', value: false },
{ channel: 'tech', value: false },
{ channel: 'smartphones', value: false },
{ channel: 'audio', value: false },
{ channel: 'video', value: false }
]
}
]
},
{
language: 'English',
sources: [
{
source: 'BBC',
channels: [
{ channel: 'news', value: false },
{ channel: 'sport', value: false },
{ channel: 'weather', value: false },
{ channel: 'travel', value: false },
{ channel: 'politics', value: false }
]
},
{
source: 'Fox News',
channels: [
{ channel: 'u.s.', value: false },
{ channel: 'world', value: false },
{ channel: 'opinion', value: false },
{ channel: 'politics', value: false },
{ channel: 'entertainment', value: false },
{ channel: 'business', value: false }
]
}
]
}
]
我可以用这个函数提取我想要的值(通道属性):
setChannel(channel: string, source: string, language: string) {
for (const i of this.data) {
if (i.language === language) {
for (const j of i.sources) {
if (j.source === source) {
for (const k of j.channels) {
if (k.channel === channel) {
console.log(k.channel);
}
}
}
}
}
}
}
现在我确定 lodash 中有一个函数可以简化这一点。因为三重嵌套的 for 和 if 不是一种好的编码方式。但我似乎无法在文档中找到它。有人可以指出我正确的方向吗?
【问题讨论】:
-
你希望最终的数组看起来如何?
-
this.dummyData 是什么?
-
预期输出是什么?
-
我想访问在函数
setChannel()中传递的channel。dummyData已更改为data。抱歉,这是来自我的测试代码。通过单击数据创建的复选框列表来传递通道
标签: javascript arrays typescript lodash