다음과 같이 scheduleOn 데이터로 그룹화 된 배열이 있습니다.
[{
scheduledOn: "2020-02-05T00:00:00"
matches:
{id: 1, homeTeamName: "BLUE", homeTeamId: 1, homeScore: 1, awayTeamName: "Red", awayTeamId: 2, …}
{id: 2,homeTeamName: "Red", homeTeamId: 2, homeScore: 1, awayTeamName: "Yellow", awayTeamId: 3, …}
},
{
scheduledOn: "2020-01-06T00:00:00"
matches:
0: {id:3, homeTeamName: "BLUE", homeTeamId: 1, homeScore: 0, awayTeamName: "Yellow", awayTeamId: 3, …}
}]
선택한 ID와 일치하는 하나의 일치 객체 (배열 아님)를 반환하고 싶습니다.
내가 시도한 가능한 해결책 :
matches.map(match => match.matches
.find(m => m.id === selectedId))
이것은 다음을 반환합니다.
[{
id: 1, homeTeamName: "BLUE", homeTeamId: 1, homeScore: 1, awayTeamName: "Red", awayTeamId: 2, …
}]
그러나 나는 이것이 배열 대신 객체가되기를 바랍니다.
내가 시도한 가능한 해결책 2 :
matches.map(match => match.matches
.filter(m => m.id === selectedId))
.map(match => console.log(match
)
이것은 다음을 반환합니다.
[
{id: 1, homeTeamName: "BLUE", homeTeamId: 1, homeScore: 1, awayTeamName: "Red", awayTeamId: 2, …}
]
그러나 이것은 또한 배열로 반환됩니다.
배열 대신 id 개체를 일치시킬 수있는 방법이 있습니까?
모든 도움에 감사드립니다
모든 matches
속성을 단일 배열로 병합 flatMap()
하고 검색 할 수 있습니다.
const src = [{"scheduledOn":"2020-02-05T00:00:00","matches":[{"id":1,"homeTeamName":"BLUE","homeTeamId":1,"homeScore":1,"awayTeamName":"Red","awayTeamId":2},{"id":2,"homeTeamName":"Red","homeTeamId":2,"homeScore":1,"awayTeamName":"Yellow","awayTeamId":3}]},{"scheduledOn":"2020-01-06T00:00:00","matches":[{"id":3,"homeTeamName":"BLUE","homeTeamId":1,"homeScore":0,"awayTeamName":"Yellow","awayTeamId":3}]}],
itemWithId2 = src.flatMap(({matches}) => matches).find(({id}) => id==2)
console.log(itemWithId2)
그러나 명심해야 할 것은 Microsoft 브라우저에서 (적어도 IE가 사라질 때까지) 실패 할 수 있습니다 (다른 많은 멋진 것들과 마찬가지로).
이 경우 arr.reduce((r,{matches}) => r.concat(matches), [])
대신 사용할 수 있습니다 flatMap()
.
큰 배열을 다룰 때 @Zohaibljaz가 제안한 중첩 된 발견이 더 성능이 좋습니다.
내 구현은 용납 할 수 없을 정도로 읽을 수없는 것입니다 .
const src = [{"scheduledOn":"2020-02-05T00:00:00","matches":[{"id":1,"homeTeamName":"BLUE","homeTeamId":1,"homeScore":1,"awayTeamName":"Red","awayTeamId":2},{"id":2,"homeTeamName":"Red","homeTeamId":2,"homeScore":1,"awayTeamName":"Yellow","awayTeamId":3}]},{"scheduledOn":"2020-01-06T00:00:00","matches":[{"id":3,"homeTeamName":"BLUE","homeTeamId":1,"homeScore":0,"awayTeamName":"Yellow","awayTeamId":3}]}]
let objectHavingIdOf2 = {}
src.find(({matches}) =>
matches.find(item =>
item.id == 2 ?
(objectHavingIdOf2 = item, true) :
false))
console.log(objectHavingIdOf2)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다