首页 > 解决方案 > 数组有 5 个对象,每个对象都有另外 5 个对象的数组属性。我正在尝试创建查找具有 ID 的对象的函数

问题描述

首先,这是使用的 JSON 文件 - https://ddragon.leagueoflegends.com/cdn/9.14.1/data/en_US/runesReforged.json

目前我有这个函数,它允许我将特定的 id 作为参数并获取该数组中的 5 个主要对象之一:

findSummonerRune: (state) => (id) => {
    let rune = state.summonerRunes.find(rune => rune.id == id);

    return rune
}

所以findSummonerRune(8100)返回第一个具有"key": "Domination"属性的对象。但是,如果我尝试查找 id of 的符文8112,它不起作用,因为该符文是一个子符文,可以在 id 的符文的属性中找到8100。更具体地说,在slots财产中。

现在我明白了为什么我的函数不起作用,它是用来查找主要 5 个对象中的哪一个具有属性 id == id,但是,我只是不确定如何也循环遍历它们的数组属性槽以查找其他符文也是如此。

标签: javascript

解决方案


就个人而言,如果您想从 退货slots,我会预先将我的清单展平:

state.flattenedRunes = state.summonerRunes.reduce((acc, rune) => 
                         acc.concat([rune], rune.slots.reduce((a, r) => a.concat(r.runes), [])), []);

我只是搜索那个列表

如果您想实际返回包含该项目的主对象slots,那么执行此操作还可以检查您的查找中的子数组。

let rune = state.summonerRunes.find(rune => rune.id == id || rune.slots.find(slot => slot.runes.find(r => r.id == id)));

推荐阅读