首页 > 解决方案 > 如何过滤数组内的数组值?

问题描述

为了更清楚,我将描述这种情况。我有一个这样的数组

animalsArray = {
animalID : number,
animalName: string,
animalDescription: string,

animalChild: animalsArray[]

}

现在我必须使用animalName来自文本字段的用户输入来过滤这些动物。有些动物可以有n个animalChild或根本没有,或者里面animalChild可以有另一个animalChild

我已经有这样的代码

public animalsArray:animalsArray[]

    this.filteredanimalsArray.next(
                this.animalsArray.filter(item => (item.animalName.toLowerCase().indexOf(search) > -1))
            );

过滤主要的animalsArray,它工作正常,但用户输入不通过子数组。

我怎么解决这个问题?提前致谢

标签: javascriptarraysangulartypescriptfilter

解决方案


也许你可以像这样使用递归:

function filterAnimals(animals, name) {
    return animals.filter(animal => {
        const matching = animal.animalName.toLowerCase() === name.toLowerCase();
        const hasChildMatch = Array.isArray(animal.animalChild) && filterAnimals(animal.animalChild, name).length > 0;
        return matching || hasChildMatch;
    });
}

const search = 'leon';
const filterdAnimals = filterAnimals(animalsArray, search);

推荐阅读