如何根据特定动态 属性 过滤反应中的对象数组?
How to filter an array of objects in react based on a specific dynamic property?
我正在调用 API 并获取数据。
0: {team: {…}, league: {…}, games: {…}, substitutes: {…}, shots: {…}, …}
1: {team: {…}, league: {…}, games: {…}, substitutes: {…}, shots: {…}, …}
2: {team: {…}, league: {…}, games: {…}, substitutes: {…}, shots: {…}, …}
3: {team: {…}, league: {…}, games: {…}, substitutes: {…}, shots: {…}, …}
4: {team: {…}, league: {…}, games: {…}, substitutes: {…}, shots: {…}, …}
现在我想做的是通过这个对象数组进行映射,并使用相同的团队过滤它,所有这些团队都在一个对象数组中,而其他团队则在另一个对象数组中,依此类推。
0:
cards: {yellow: 2, yellowred: 0, red: 0}
dribbles: {attempts: 9, success: 5, past: null}
duels: {total: 113, won: 58}
fouls: {drawn: 9, committed: 16}
games: {appearences: 23, lineups: 11, minutes: 1007, number: null, position: 'Attacker', …}
goals: {total: 8, conceded: 0, assists: 3, saves: null}
league: {id: 135, name: 'Serie A', country: 'Italy', logo: 'https://media.api-sports.io/football/leagues/135.png', flag: 'https://media.api-sports.io/flags/it.svg', …}
passes: {total: 414, key: 23, accuracy: 13}
penalty: {won: null, commited: null, scored: 0, missed: 1, saved: null}
shots: {total: 42, on: 20}
substitutes: {in: 12, out: 4, bench: 14}
tackles: {total: null, blocks: 1, interceptions: 3}
team: {id: 489, name: 'AC Milan', logo: 'https://media.api-sports.io/football/teams/489.png'}
[[Prototype]]: Object
每个团队都有不同的 ID。而且由于我事先不知道团队的 ID,所以我不知道如何过滤它。一切都是动态的,甚至是 ID。
var _ = require('lodash');
list = [
{check: 1 , team: {id: 489, name: 'AC Milan'} }, { check: 1 , team: {id: 489, name: 'AC Milan1'} },
{ check: 1 , team: {id: 489, name: 'AC Milan1'} }, { check: 2 , team: {id: 489, name: 'AC Milan3'}},
{ check: 2 , team: {id: 489, name: 'AC Milan2'}}, { check: 3 , team: {id: 489, name: 'AC Milan5'}},
{ check: 5 , team: {id: 489, name: 'AC Milan3'}}, { check: 5 , team: {id: 489, name: 'AC Milan7'} }
]
test = _.groupBy(list, "team.name");
console.log(test)
以下是我如何分解这些类型的问题。
- 是缩小图还是贴图?当结果可以/必须键入时,前者为真。
- 是什么喂养了 (1)?
我的第一个猜测是你有一个由一系列团队提供的减少。
缩减是一个类似于 (array, {}) -> { key: value }
的函数
数组包含创建键和值的信息。
数组:原始数据
keyFromRawFn:
rawData => rawData.team.id
valueFromRawFn:
rawData => a record as described in your result
因此,减少量将是,
rawDatas.reduction((newObj, rawData) => {
const key = keyFromRawFn(rawData);
const value = valueFromRawFn(rawData);
newObj[key] = value;
return newObj;
}, {});
这假定 rawDatas 的数组长度 = 团队数。似乎是一个合理的初步猜测,因为每个“团队”都有“游戏”。
如果不是,这仍然是一个有效的“核心”例程。我们需要找出一个“pre-processing”来获得符合条件的原始数据。 pre-processing 将是一个以 id 为键的缩减,另一个缩减是将每个 preRawData 与 preRawDatas 条目组合起来的缩减(如果计数则使用 sum,如果它们都有游戏数量则使用平均值,或者 [=41 的总和) =] x 平均值)。
我正在调用 API 并获取数据。
0: {team: {…}, league: {…}, games: {…}, substitutes: {…}, shots: {…}, …}
1: {team: {…}, league: {…}, games: {…}, substitutes: {…}, shots: {…}, …}
2: {team: {…}, league: {…}, games: {…}, substitutes: {…}, shots: {…}, …}
3: {team: {…}, league: {…}, games: {…}, substitutes: {…}, shots: {…}, …}
4: {team: {…}, league: {…}, games: {…}, substitutes: {…}, shots: {…}, …}
现在我想做的是通过这个对象数组进行映射,并使用相同的团队过滤它,所有这些团队都在一个对象数组中,而其他团队则在另一个对象数组中,依此类推。
0:
cards: {yellow: 2, yellowred: 0, red: 0}
dribbles: {attempts: 9, success: 5, past: null}
duels: {total: 113, won: 58}
fouls: {drawn: 9, committed: 16}
games: {appearences: 23, lineups: 11, minutes: 1007, number: null, position: 'Attacker', …}
goals: {total: 8, conceded: 0, assists: 3, saves: null}
league: {id: 135, name: 'Serie A', country: 'Italy', logo: 'https://media.api-sports.io/football/leagues/135.png', flag: 'https://media.api-sports.io/flags/it.svg', …}
passes: {total: 414, key: 23, accuracy: 13}
penalty: {won: null, commited: null, scored: 0, missed: 1, saved: null}
shots: {total: 42, on: 20}
substitutes: {in: 12, out: 4, bench: 14}
tackles: {total: null, blocks: 1, interceptions: 3}
team: {id: 489, name: 'AC Milan', logo: 'https://media.api-sports.io/football/teams/489.png'}
[[Prototype]]: Object
每个团队都有不同的 ID。而且由于我事先不知道团队的 ID,所以我不知道如何过滤它。一切都是动态的,甚至是 ID。
var _ = require('lodash');
list = [
{check: 1 , team: {id: 489, name: 'AC Milan'} }, { check: 1 , team: {id: 489, name: 'AC Milan1'} },
{ check: 1 , team: {id: 489, name: 'AC Milan1'} }, { check: 2 , team: {id: 489, name: 'AC Milan3'}},
{ check: 2 , team: {id: 489, name: 'AC Milan2'}}, { check: 3 , team: {id: 489, name: 'AC Milan5'}},
{ check: 5 , team: {id: 489, name: 'AC Milan3'}}, { check: 5 , team: {id: 489, name: 'AC Milan7'} }
]
test = _.groupBy(list, "team.name");
console.log(test)
以下是我如何分解这些类型的问题。
- 是缩小图还是贴图?当结果可以/必须键入时,前者为真。
- 是什么喂养了 (1)?
我的第一个猜测是你有一个由一系列团队提供的减少。
缩减是一个类似于 (array, {}) -> { key: value }
的函数数组包含创建键和值的信息。
数组:原始数据
keyFromRawFn:
rawData => rawData.team.id
valueFromRawFn:
rawData => a record as described in your result
因此,减少量将是,
rawDatas.reduction((newObj, rawData) => {
const key = keyFromRawFn(rawData);
const value = valueFromRawFn(rawData);
newObj[key] = value;
return newObj;
}, {});
这假定 rawDatas 的数组长度 = 团队数。似乎是一个合理的初步猜测,因为每个“团队”都有“游戏”。
如果不是,这仍然是一个有效的“核心”例程。我们需要找出一个“pre-processing”来获得符合条件的原始数据。 pre-processing 将是一个以 id 为键的缩减,另一个缩减是将每个 preRawData 与 preRawDatas 条目组合起来的缩减(如果计数则使用 sum,如果它们都有游戏数量则使用平均值,或者 [=41 的总和) =] x 平均值)。