javascript - 如何根据数组数组中的前一个元素过滤元素
问题描述
假设您有以下代码来过滤动物,以便只保存那些比数组中前一个动物更重的动物(第一个对象永远不会被保存,因为没有前一个动物):
const animals = [
{ id: 3, weight: 300, type: 'pig' },
{ id: 1, weight: 200, type: "cow" },
{ id: 7, weight: 400, type: "horse" },
{ id: 6, weight: 100, type: "pig" },
];
const filteredAnimals = animals.filter((animal, index) =>
animals[index - 1] && animal.weight > animals[index - 1].weight);
console.log('filtered animals: ', filteredAnimals);
这按预期工作,但我无法弄清楚如何应用具有数组数组的相同过滤器:
const animals = [
[
{ id: 5, weight: 300, type: 'pig' },
{ id: 1, weight: 200, type: "cow" },
{ id: 3, weight: 400, type: "horse" },
{ id: 4, weight: 350, type: "pig" },
],
[
{ id: 2, weight: 250, type: "horse" },
{ id: 6, weight: 350, type: 'pig' },
{ id: 8, weight: 250, type: "cow" },
{ id: 7, weight: 400, type: "pig" },
]
]
在这种情况下,预期的结果应该是:
const filteredAnimals = [
[
{ id: 3, weight: 400, type: "horse" },
],
[
{ id: 6, weight: 350, type: "pig" },
{ id: 7, weight: 400, type: "pig" },
]
]
关于如何实现这一目标的任何建议?
解决方案
filter
只需将您的in a包围起来.map
,即可遍历所有子数组:
const animals = [
[
{ id: 5, weight: 300, type: 'pig' },
{ id: 1, weight: 200, type: "cow" },
{ id: 3, weight: 400, type: "horse" },
{ id: 4, weight: 350, type: "pig" },
],
[
{ id: 2, weight: 250, type: "horse" },
{ id: 6, weight: 350, type: 'pig' },
{ id: 8, weight: 250, type: "cow" },
{ id: 7, weight: 400, type: "pig" },
]
]
const filteredAnimals = animals.map(
subarr => subarr.filter((animal, index) =>
subarr[index - 1] && animal.weight > subarr[index - 1].weight
)
);
console.log(filteredAnimals);
推荐阅读
- javascript - SVG路径跟随翻转和旋转+不跟随路径
- akka - Akka 集群启动无法注册到协调器
- angular - 错误:具有未指定名称属性的表单控件没有值访问器
- java - 我可以得到一些帮助来了解导致我的“NoSuchElementException”的原因吗?
- excel - 使用数组从数据源创建报表副本 使用唯一列表创建单个报表
- spring-boot - 如何从 Spring Boot 应用程序中的所有子包中注册 bean?
- ssh - 无法通过端口转发访问 Open VPN 管理控制台
- python - 使用超声波传感器检查距离的功能会冻结 tkinter
- keras - 虽然 import resnet 出错 - ImportError: cannot import name '_obtain_input_shape''
- javascript - 它正确地将私有函数添加到 Doctrine 实体类