下划线过滤多维对象
Underscore filtering multidimensional object
说这是我的数据,我怎么能用Underscore过滤数据只保留tax_rank的嵌套部分,而保留对象结构?
我正在尝试创建一个热图,当您从下拉列表中进行选择时,它会按 tax_rank 重新绘制热图。我是 Underscore 的新手,.filter、.pluck 和 .map 实用程序看起来很有帮助,但我似乎无法正确链接。
let data = [
{
"sample_date": "2017-07-04T00:00:00.000Z",
"ubiome": [
{
"taxon": 817,
"parent": 816,
"count": 72,
"count_norm": 1283,
"tax_name": "Bacteroides fragilis",
"tax_rank": "species"
},
{
"taxon": 818,
"parent": 816,
"count": 208,
"count_norm": 3708,
"tax_name": "Bacteroides thetaiotaomicron",
"tax_rank": "species"
},
{
"taxon": 820,
"parent": 816,
"count": 41,
"count_norm": 731,
"tax_name": "Bacteroides uniformis",
"tax_rank": "species"
},
{
"taxon": 821,
"parent": 816,
"count": 3490,
"count_norm": 62226,
"tax_name": "Bacteroides vulgatus",
"tax_rank": "species"
},
{
"taxon": 823,
"parent": 375288,
"count": 120,
"count_norm": 2139,
"tax_name": "Parabacteroides distasonis",
"tax_rank": "species"
},
{
"taxon": 832,
"parent": 204431,
"count": 12,
"count_norm": 213,
"tax_name": "Fibrobacter",
"tax_rank": "genus"
},
{
"taxon": 841,
"parent": 186803,
"count": 1285,
"count_norm": 22911,
"tax_name": "Roseburia",
"tax_rank": "genus"
},
{
"taxon": 842,
"parent": 841,
"count": 11,
"count_norm": 196,
"tax_name": "Roseburia cecicola",
"tax_rank": "species"
},
{
"taxon": 853,
"parent": 216851,
"count": 7853,
"count_norm": 140019,
"tax_name": "Faecalibacterium prausnitzii",
"tax_rank": "species"
},
{
"taxon": 976,
"parent": 68336,
"count": 26028,
"count_norm": 464081,
"tax_name": "Bacteroidetes",
"tax_rank": "phylum"
}
]
},
{
"sample_date": "2017-07-04T00:00:00.000Z",
"ubiome": [
{
"taxon": 817,
"parent": 816,
"count": 72,
"count_norm": 1283,
"tax_name": "Bacteroides fragilis",
"tax_rank": "species"
},
{
"taxon": 818,
"parent": 816,
"count": 208,
"count_norm": 3708,
"tax_name": "Bacteroides thetaiotaomicron",
"tax_rank": "species"
},
{
"taxon": 820,
"parent": 816,
"count": 41,
"count_norm": 731,
"tax_name": "Bacteroides uniformis",
"tax_rank": "species"
},
{
"taxon": 821,
"parent": 816,
"count": 3490,
"count_norm": 62226,
"tax_name": "Bacteroides vulgatus",
"tax_rank": "species"
},
{
"taxon": 823,
"parent": 375288,
"count": 120,
"count_norm": 2139,
"tax_name": "Parabacteroides distasonis",
"tax_rank": "species"
},
{
"taxon": 832,
"parent": 204431,
"count": 12,
"count_norm": 213,
"tax_name": "Fibrobacter",
"tax_rank": "genus"
},
{
"taxon": 841,
"parent": 186803,
"count": 1285,
"count_norm": 22911,
"tax_name": "Roseburia",
"tax_rank": "genus"
},
{
"taxon": 842,
"parent": 841,
"count": 11,
"count_norm": 196,
"tax_name": "Roseburia cecicola",
"tax_rank": "species"
},
{
"taxon": 853,
"parent": 216851,
"count": 7853,
"count_norm": 140019,
"tax_name": "Faecalibacterium prausnitzii",
"tax_rank": "species"
},
{
"taxon": 976,
"parent": 68336,
"count": 26028,
"count_norm": 464081,
"tax_name": "Bacteroidetes",
"tax_rank": "phylum"
}
]
}]
如果过滤器参数是 tax_rank = species:
,这就是我希望实现的
let data = [
{
"sample_date": "2017-07-04T00:00:00.000Z",
"ubiome": [
{
"taxon": 817,
"parent": 816,
"count": 72,
"count_norm": 1283,
"tax_name": "Bacteroides fragilis",
"tax_rank": "species"
},
{
"taxon": 818,
"parent": 816,
"count": 208,
"count_norm": 3708,
"tax_name": "Bacteroides thetaiotaomicron",
"tax_rank": "species"
},
{
"taxon": 820,
"parent": 816,
"count": 41,
"count_norm": 731,
"tax_name": "Bacteroides uniformis",
"tax_rank": "species"
},
{
"taxon": 821,
"parent": 816,
"count": 3490,
"count_norm": 62226,
"tax_name": "Bacteroides vulgatus",
"tax_rank": "species"
},
{
"taxon": 823,
"parent": 375288,
"count": 120,
"count_norm": 2139,
"tax_name": "Parabacteroides distasonis",
"tax_rank": "species"
},
{
"taxon": 842,
"parent": 841,
"count": 11,
"count_norm": 196,
"tax_name": "Roseburia cecicola",
"tax_rank": "species"
},
{
"taxon": 853,
"parent": 216851,
"count": 7853,
"count_norm": 140019,
"tax_name": "Faecalibacterium prausnitzii",
"tax_rank": "species"
}
]
},
{
"sample_date": "2017-07-04T00:00:00.000Z",
"ubiome": [
{
"taxon": 817,
"parent": 816,
"count": 72,
"count_norm": 1283,
"tax_name": "Bacteroides fragilis",
"tax_rank": "species"
},
{
"taxon": 818,
"parent": 816,
"count": 208,
"count_norm": 3708,
"tax_name": "Bacteroides thetaiotaomicron",
"tax_rank": "species"
},
{
"taxon": 820,
"parent": 816,
"count": 41,
"count_norm": 731,
"tax_name": "Bacteroides uniformis",
"tax_rank": "species"
},
{
"taxon": 821,
"parent": 816,
"count": 3490,
"count_norm": 62226,
"tax_name": "Bacteroides vulgatus",
"tax_rank": "species"
},
{
"taxon": 823,
"parent": 375288,
"count": 120,
"count_norm": 2139,
"tax_name": "Parabacteroides distasonis",
"tax_rank": "species"
},
{
"taxon": 842,
"parent": 841,
"count": 11,
"count_norm": 196,
"tax_name": "Roseburia cecicola",
"tax_rank": "species"
},
{
"taxon": 853,
"parent": 216851,
"count": 7853,
"count_norm": 140019,
"tax_name": "Faecalibacterium prausnitzii",
"tax_rank": "species"
}
]
}]
不要用下划线,用纯js会更短。
data.forEach(e => e.ubiome = e.ubiome.filter(e => e.tax_rank === 'species'));
console.log(data);
<script>
let data = [
{
"sample_date": "2017-07-04T00:00:00.000Z",
"ubiome": [
{
"taxon": 817,
"parent": 816,
"count": 72,
"count_norm": 1283,
"tax_name": "Bacteroides fragilis",
"tax_rank": "species"
},
{
"taxon": 818,
"parent": 816,
"count": 208,
"count_norm": 3708,
"tax_name": "Bacteroides thetaiotaomicron",
"tax_rank": "species"
},
{
"taxon": 820,
"parent": 816,
"count": 41,
"count_norm": 731,
"tax_name": "Bacteroides uniformis",
"tax_rank": "species"
},
{
"taxon": 821,
"parent": 816,
"count": 3490,
"count_norm": 62226,
"tax_name": "Bacteroides vulgatus",
"tax_rank": "species"
},
{
"taxon": 823,
"parent": 375288,
"count": 120,
"count_norm": 2139,
"tax_name": "Parabacteroides distasonis",
"tax_rank": "species"
},
{
"taxon": 832,
"parent": 204431,
"count": 12,
"count_norm": 213,
"tax_name": "Fibrobacter",
"tax_rank": "genus"
},
{
"taxon": 841,
"parent": 186803,
"count": 1285,
"count_norm": 22911,
"tax_name": "Roseburia",
"tax_rank": "genus"
},
{
"taxon": 842,
"parent": 841,
"count": 11,
"count_norm": 196,
"tax_name": "Roseburia cecicola",
"tax_rank": "species"
},
{
"taxon": 853,
"parent": 216851,
"count": 7853,
"count_norm": 140019,
"tax_name": "Faecalibacterium prausnitzii",
"tax_rank": "species"
},
{
"taxon": 976,
"parent": 68336,
"count": 26028,
"count_norm": 464081,
"tax_name": "Bacteroidetes",
"tax_rank": "phylum"
}
]
},
{
"sample_date": "2017-07-04T00:00:00.000Z",
"ubiome": [
{
"taxon": 817,
"parent": 816,
"count": 72,
"count_norm": 1283,
"tax_name": "Bacteroides fragilis",
"tax_rank": "species"
},
{
"taxon": 818,
"parent": 816,
"count": 208,
"count_norm": 3708,
"tax_name": "Bacteroides thetaiotaomicron",
"tax_rank": "species"
},
{
"taxon": 820,
"parent": 816,
"count": 41,
"count_norm": 731,
"tax_name": "Bacteroides uniformis",
"tax_rank": "species"
},
{
"taxon": 821,
"parent": 816,
"count": 3490,
"count_norm": 62226,
"tax_name": "Bacteroides vulgatus",
"tax_rank": "species"
},
{
"taxon": 823,
"parent": 375288,
"count": 120,
"count_norm": 2139,
"tax_name": "Parabacteroides distasonis",
"tax_rank": "species"
},
{
"taxon": 832,
"parent": 204431,
"count": 12,
"count_norm": 213,
"tax_name": "Fibrobacter",
"tax_rank": "genus"
},
{
"taxon": 841,
"parent": 186803,
"count": 1285,
"count_norm": 22911,
"tax_name": "Roseburia",
"tax_rank": "genus"
},
{
"taxon": 842,
"parent": 841,
"count": 11,
"count_norm": 196,
"tax_name": "Roseburia cecicola",
"tax_rank": "species"
},
{
"taxon": 853,
"parent": 216851,
"count": 7853,
"count_norm": 140019,
"tax_name": "Faecalibacterium prausnitzii",
"tax_rank": "species"
},
{
"taxon": 976,
"parent": 68336,
"count": 26028,
"count_norm": 464081,
"tax_name": "Bacteroidetes",
"tax_rank": "phylum"
}
]
}];
</script>
恕我直言 underscore/lodash 在 plain js 具有完全相同的功能之前更重要,现在大多数都在 Array.prototype 上,这使得链接更容易,阅读更清晰,...使用 plain JavaScript。
说这是我的数据,我怎么能用Underscore过滤数据只保留tax_rank的嵌套部分,而保留对象结构?
我正在尝试创建一个热图,当您从下拉列表中进行选择时,它会按 tax_rank 重新绘制热图。我是 Underscore 的新手,.filter、.pluck 和 .map 实用程序看起来很有帮助,但我似乎无法正确链接。
let data = [
{
"sample_date": "2017-07-04T00:00:00.000Z",
"ubiome": [
{
"taxon": 817,
"parent": 816,
"count": 72,
"count_norm": 1283,
"tax_name": "Bacteroides fragilis",
"tax_rank": "species"
},
{
"taxon": 818,
"parent": 816,
"count": 208,
"count_norm": 3708,
"tax_name": "Bacteroides thetaiotaomicron",
"tax_rank": "species"
},
{
"taxon": 820,
"parent": 816,
"count": 41,
"count_norm": 731,
"tax_name": "Bacteroides uniformis",
"tax_rank": "species"
},
{
"taxon": 821,
"parent": 816,
"count": 3490,
"count_norm": 62226,
"tax_name": "Bacteroides vulgatus",
"tax_rank": "species"
},
{
"taxon": 823,
"parent": 375288,
"count": 120,
"count_norm": 2139,
"tax_name": "Parabacteroides distasonis",
"tax_rank": "species"
},
{
"taxon": 832,
"parent": 204431,
"count": 12,
"count_norm": 213,
"tax_name": "Fibrobacter",
"tax_rank": "genus"
},
{
"taxon": 841,
"parent": 186803,
"count": 1285,
"count_norm": 22911,
"tax_name": "Roseburia",
"tax_rank": "genus"
},
{
"taxon": 842,
"parent": 841,
"count": 11,
"count_norm": 196,
"tax_name": "Roseburia cecicola",
"tax_rank": "species"
},
{
"taxon": 853,
"parent": 216851,
"count": 7853,
"count_norm": 140019,
"tax_name": "Faecalibacterium prausnitzii",
"tax_rank": "species"
},
{
"taxon": 976,
"parent": 68336,
"count": 26028,
"count_norm": 464081,
"tax_name": "Bacteroidetes",
"tax_rank": "phylum"
}
]
},
{
"sample_date": "2017-07-04T00:00:00.000Z",
"ubiome": [
{
"taxon": 817,
"parent": 816,
"count": 72,
"count_norm": 1283,
"tax_name": "Bacteroides fragilis",
"tax_rank": "species"
},
{
"taxon": 818,
"parent": 816,
"count": 208,
"count_norm": 3708,
"tax_name": "Bacteroides thetaiotaomicron",
"tax_rank": "species"
},
{
"taxon": 820,
"parent": 816,
"count": 41,
"count_norm": 731,
"tax_name": "Bacteroides uniformis",
"tax_rank": "species"
},
{
"taxon": 821,
"parent": 816,
"count": 3490,
"count_norm": 62226,
"tax_name": "Bacteroides vulgatus",
"tax_rank": "species"
},
{
"taxon": 823,
"parent": 375288,
"count": 120,
"count_norm": 2139,
"tax_name": "Parabacteroides distasonis",
"tax_rank": "species"
},
{
"taxon": 832,
"parent": 204431,
"count": 12,
"count_norm": 213,
"tax_name": "Fibrobacter",
"tax_rank": "genus"
},
{
"taxon": 841,
"parent": 186803,
"count": 1285,
"count_norm": 22911,
"tax_name": "Roseburia",
"tax_rank": "genus"
},
{
"taxon": 842,
"parent": 841,
"count": 11,
"count_norm": 196,
"tax_name": "Roseburia cecicola",
"tax_rank": "species"
},
{
"taxon": 853,
"parent": 216851,
"count": 7853,
"count_norm": 140019,
"tax_name": "Faecalibacterium prausnitzii",
"tax_rank": "species"
},
{
"taxon": 976,
"parent": 68336,
"count": 26028,
"count_norm": 464081,
"tax_name": "Bacteroidetes",
"tax_rank": "phylum"
}
]
}]
如果过滤器参数是 tax_rank = species:
,这就是我希望实现的let data = [
{
"sample_date": "2017-07-04T00:00:00.000Z",
"ubiome": [
{
"taxon": 817,
"parent": 816,
"count": 72,
"count_norm": 1283,
"tax_name": "Bacteroides fragilis",
"tax_rank": "species"
},
{
"taxon": 818,
"parent": 816,
"count": 208,
"count_norm": 3708,
"tax_name": "Bacteroides thetaiotaomicron",
"tax_rank": "species"
},
{
"taxon": 820,
"parent": 816,
"count": 41,
"count_norm": 731,
"tax_name": "Bacteroides uniformis",
"tax_rank": "species"
},
{
"taxon": 821,
"parent": 816,
"count": 3490,
"count_norm": 62226,
"tax_name": "Bacteroides vulgatus",
"tax_rank": "species"
},
{
"taxon": 823,
"parent": 375288,
"count": 120,
"count_norm": 2139,
"tax_name": "Parabacteroides distasonis",
"tax_rank": "species"
},
{
"taxon": 842,
"parent": 841,
"count": 11,
"count_norm": 196,
"tax_name": "Roseburia cecicola",
"tax_rank": "species"
},
{
"taxon": 853,
"parent": 216851,
"count": 7853,
"count_norm": 140019,
"tax_name": "Faecalibacterium prausnitzii",
"tax_rank": "species"
}
]
},
{
"sample_date": "2017-07-04T00:00:00.000Z",
"ubiome": [
{
"taxon": 817,
"parent": 816,
"count": 72,
"count_norm": 1283,
"tax_name": "Bacteroides fragilis",
"tax_rank": "species"
},
{
"taxon": 818,
"parent": 816,
"count": 208,
"count_norm": 3708,
"tax_name": "Bacteroides thetaiotaomicron",
"tax_rank": "species"
},
{
"taxon": 820,
"parent": 816,
"count": 41,
"count_norm": 731,
"tax_name": "Bacteroides uniformis",
"tax_rank": "species"
},
{
"taxon": 821,
"parent": 816,
"count": 3490,
"count_norm": 62226,
"tax_name": "Bacteroides vulgatus",
"tax_rank": "species"
},
{
"taxon": 823,
"parent": 375288,
"count": 120,
"count_norm": 2139,
"tax_name": "Parabacteroides distasonis",
"tax_rank": "species"
},
{
"taxon": 842,
"parent": 841,
"count": 11,
"count_norm": 196,
"tax_name": "Roseburia cecicola",
"tax_rank": "species"
},
{
"taxon": 853,
"parent": 216851,
"count": 7853,
"count_norm": 140019,
"tax_name": "Faecalibacterium prausnitzii",
"tax_rank": "species"
}
]
}]
不要用下划线,用纯js会更短。
data.forEach(e => e.ubiome = e.ubiome.filter(e => e.tax_rank === 'species'));
console.log(data);
<script>
let data = [
{
"sample_date": "2017-07-04T00:00:00.000Z",
"ubiome": [
{
"taxon": 817,
"parent": 816,
"count": 72,
"count_norm": 1283,
"tax_name": "Bacteroides fragilis",
"tax_rank": "species"
},
{
"taxon": 818,
"parent": 816,
"count": 208,
"count_norm": 3708,
"tax_name": "Bacteroides thetaiotaomicron",
"tax_rank": "species"
},
{
"taxon": 820,
"parent": 816,
"count": 41,
"count_norm": 731,
"tax_name": "Bacteroides uniformis",
"tax_rank": "species"
},
{
"taxon": 821,
"parent": 816,
"count": 3490,
"count_norm": 62226,
"tax_name": "Bacteroides vulgatus",
"tax_rank": "species"
},
{
"taxon": 823,
"parent": 375288,
"count": 120,
"count_norm": 2139,
"tax_name": "Parabacteroides distasonis",
"tax_rank": "species"
},
{
"taxon": 832,
"parent": 204431,
"count": 12,
"count_norm": 213,
"tax_name": "Fibrobacter",
"tax_rank": "genus"
},
{
"taxon": 841,
"parent": 186803,
"count": 1285,
"count_norm": 22911,
"tax_name": "Roseburia",
"tax_rank": "genus"
},
{
"taxon": 842,
"parent": 841,
"count": 11,
"count_norm": 196,
"tax_name": "Roseburia cecicola",
"tax_rank": "species"
},
{
"taxon": 853,
"parent": 216851,
"count": 7853,
"count_norm": 140019,
"tax_name": "Faecalibacterium prausnitzii",
"tax_rank": "species"
},
{
"taxon": 976,
"parent": 68336,
"count": 26028,
"count_norm": 464081,
"tax_name": "Bacteroidetes",
"tax_rank": "phylum"
}
]
},
{
"sample_date": "2017-07-04T00:00:00.000Z",
"ubiome": [
{
"taxon": 817,
"parent": 816,
"count": 72,
"count_norm": 1283,
"tax_name": "Bacteroides fragilis",
"tax_rank": "species"
},
{
"taxon": 818,
"parent": 816,
"count": 208,
"count_norm": 3708,
"tax_name": "Bacteroides thetaiotaomicron",
"tax_rank": "species"
},
{
"taxon": 820,
"parent": 816,
"count": 41,
"count_norm": 731,
"tax_name": "Bacteroides uniformis",
"tax_rank": "species"
},
{
"taxon": 821,
"parent": 816,
"count": 3490,
"count_norm": 62226,
"tax_name": "Bacteroides vulgatus",
"tax_rank": "species"
},
{
"taxon": 823,
"parent": 375288,
"count": 120,
"count_norm": 2139,
"tax_name": "Parabacteroides distasonis",
"tax_rank": "species"
},
{
"taxon": 832,
"parent": 204431,
"count": 12,
"count_norm": 213,
"tax_name": "Fibrobacter",
"tax_rank": "genus"
},
{
"taxon": 841,
"parent": 186803,
"count": 1285,
"count_norm": 22911,
"tax_name": "Roseburia",
"tax_rank": "genus"
},
{
"taxon": 842,
"parent": 841,
"count": 11,
"count_norm": 196,
"tax_name": "Roseburia cecicola",
"tax_rank": "species"
},
{
"taxon": 853,
"parent": 216851,
"count": 7853,
"count_norm": 140019,
"tax_name": "Faecalibacterium prausnitzii",
"tax_rank": "species"
},
{
"taxon": 976,
"parent": 68336,
"count": 26028,
"count_norm": 464081,
"tax_name": "Bacteroidetes",
"tax_rank": "phylum"
}
]
}];
</script>
恕我直言 underscore/lodash 在 plain js 具有完全相同的功能之前更重要,现在大多数都在 Array.prototype 上,这使得链接更容易,阅读更清晰,...使用 plain JavaScript。