1
Immutable.JS에있는지도에서 여러 키를 삭제하는 기능은 무엇입니까?Immutable.js에서 다중 중첩 키를 삭제하는 가장 좋은 방법은 무엇입니까?
const x = fromJS({
a1: 'A',
a2: { b: { c0:'C0', c1:'C1' } },
a3: { b:'B' },
a4: { b: { c:'C', c1:'C1', c2:'C2' }},
a5: { b: { c: { d:'D', d1:'D1' }}},
a6: { b: { c2:'c2' }},
});
어떤 간단한 순수한 방법이 있나요 어떻게 할 :
내가 c0
는,이 예에서 불변의 맵에서 c1
, c2
모든 중첩 된 키를 삭제 싶은 말은하자?
const { fromJS, Map } = Immutable;
const x = fromJS({
a1: 'A',
a2: { b: { c0:'C0', c1:'C1' } },
a3: { b:'B' },
a4: { b: { c:'C', c1:'C1', c2:'C2' }},
a5: { b: { c: { d:'D', d1:'D1' }}},
a6: { b: { c2:'c2' }},
});
console.log(x.toJS());
const newX = x.map((value, key) => {
if (Map.isMap(value)){
value = value.hasIn(['b', 'c0']) ? value.deleteIn(['b', 'c0']) : value;
value = value.hasIn(['b', 'c1']) ? value.deleteIn(['b', 'c1']) : value;
value = value.hasIn(['b', 'c2']) ? value.deleteIn(['b', 'c2']) : value;
}
return value;
});
console.log('----------------------------');
console.log(newX.toJS());
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>
하지만 value = value.hasIn(...
도 ESLint에서 변수 재 할당을 좋아하지 않는다 :
내 솔루션이 있습니다.
오! 위대한, 나는 우리가 변경할 수있는 방법을 알 수 없다. 또한 withMutations()와 같이 예를 들어 주셔서 감사합니다 하지만 경로가 있는지 여부를 확인할 필요가 없다고 생각합니다. 적어도 'deleteIn'은 오류'Uncaught Error : invalid keyPath'를 throw합니다. . 시도해 볼 수 있습니다. https://codepen.io/webmato/pen/bwZjPa?editors=0012 – webmato
@webmato "하지만 경로가 있는지 여부를 확인할 필요가없는 것 같아요."- - 글쎄, 복잡하다 :'a3 : {b : 'B'},'deleteIn ([ 'b', 'c1'])'b '는 객체가 아니기 때문에 실패한다. 이 예제의 근본적인 문제는 객체의 알 수없는 모양이라고 생각합니다. 나는 당신이 당신의 데이터 구조를 좀더 엄격하게 만들면 불필요한 검사를 모두하지 않아도 될 것이라고 믿습니다. 그렇지 않으면 확인해야합니다. – zerkms