새 필터를 선택하는 것이 좋습니다. 목록을 필터링하려고 시도 할 때까지 지금까지 셀렉터를 만드는 데 성공했습니다. 중첩 된 키 값 쌍 대부분의 옵션은 문자열 또는 문자열 배열이며 제대로 작동하지만 객체의 true/false 값으로이 목록을 필터링하는 방법을 알 수 없습니다. 여기 배열을 필터링하고 중첩 된 객체에 true 값이 포함되어 있는지 확인하는 방법
지금까지 내 작업의 선택이며, 나는 그것을 사용하고 json으로는const getItemsVisibilityFilter = state => state.itemsVisibilityFilter
const getItems = state => state.items
export const getVisibleItems = createSelector(
[getItemsVisibilityFilter, getItems],
(itemsVisibilityFilter, items) => {
switch (itemsVisibilityFilter) {
case 'SHOW_ALL':
console.log(items)
return items
case 'SHOW_DAMAGE':
return items.filter(item => item.tags.includes('Damage'))
case 'SHOW_ATTACK_SPEED':
return items.filter(item => item.tags.includes('AttackSpeed'))
case 'SHOW_LIFE_STEAL':
return items.filter(item => item.tags.includes('LifeSteal'))
default:
return items
}
}
)
를 정렬하고이
"1036": {
"stats": {
"FlatPhysicalDamageMod": 10
},
"description": "<stats>+10 Attack Damage</stats>",
"gold": {
"total": 350,
"sell": 245,
"base": 350,
"purchasable": true
},
"tags": [
"Damage",
"Lane"
],
"plaintext": "Slightly increases Attack Damage",
"image": {
"full": "1036.png",
"group": "item",
"sprite": "item0.png",
"h": 48,
"w": 48,
"y": 48,
"x": 48
},
"sanitizedDescription": "+10 Attack Damage",
"maps": {
"8": true,
"10": true,
"11": true,
"12": true,
"14": false,
"16": false,
"18": true,
"19": true
},
"into": [
"3077",
"3123",
"1053",
"3155",
"3134",
"3133",
"3034",
"3035",
"3044",
"3052",
"3072",
"3122",
"3144",
"3252"
],
"id": 1036,
"name": "Long Sword"
},
내 질문 인 JSON 어떻게 할에서 단일 항목입니다 "maps"객체를 필터링하고 true 값을 가진 항목을 반환합니까? 이게 도움이된다면. {11 : TRUE} 그래서
const getItemsVisibilityFilter = state => state.itemsVisibilityFilter
const getItems = state => state.items
export const getVisibleItems = createSelector(
[getItemsVisibilityFilter, getItems],
(itemsVisibilityFilter, items) => {
switch (itemsVisibilityFilter) {
case 'SHOW_ALL':
console.log(items)
return items
case 'SHOW_DAMAGE':
return items.filter(item => item.tags.includes('Damage'))
case 'SHOW_ATTACK_SPEED':
return items.filter(item => item.tags.includes('AttackSpeed'))
case 'SHOW_LIFE_STEAL':
return items.filter(item => item.tags.includes('LifeSteal'))
case 'SHOW_SUMMONERS_RIFT':
return items.filter(item => item.maps.includes(I don't know what or to put here to see if 11 === true))
default:
return items
}
}
)
같은이 솔루션을 제공 할 수있는 충분한 코드가없는 경우 "지도"- 제가 원래 선택에 추가 할 것은 'SHOW_SUMMONERS_RIFT'입니다. 알려 주시면 더 관련성이 있다고 생각되는 것을 게시 할 수 있습니다. 또는 어딘가에 문서가있는 경우 더 자세히 읽어야합니다 ... 발견 한 모든 것은 중첩 된 개체를 업데이트하는 것이고 값을 비교하는 것에 대해서는 찾을 수 없습니다. 제발, 고마워요.
해결책 --- 나를 올바른 경로에두기위한 Hardik Modha 덕택입니다. 이것이 최선의 솔루션인지 또는 재 선택, Redux 또는 일반 자바 스크립트 하하를 사용하는 좋은 방법인지는 모르겠지만, 여기에 나와있는 경우가 있으며 중첩 된 객체를 기반으로 한 선택기에서 작동합니다.
Object.entries를 사용
const로 맵 객체를 설정할 수 없습니다. 이것은 맵 객체의 변형이 다른 100 개의 항목이있는 배열의 단일 항목 일뿐입니다. 또는 나는 당신의 대답을 오독하고 있는가? 나는 앞으로 몇 분 동안 모바일에있다. 나는 당신의 대답에 대한 답변으로 몇 가지 몇 가지를 추가 할 것입니다. –
코드 스 니펫을 업데이트했습니다. 희망이 도움 : –
안녕하세요, 고마워요. 방금 내 대답을 기반으로 작업 코드를 게시하고 올바른 것으로 응답을 표시합니다. 다시 한 번 감사드립니다. –