>

Ramda를 사용하여 중첩 객체 구조의 배열에서 값을 업데이트하려고합니다.

C 에서 객체의 prop 값을 업데이트하고 싶습니다  이름이 blah

const o = {
  A: {
    B: {
      C: [
        {name: 'blah', value: 'blah'},
        {name: 'vtha', value: 'blah'},
      ]
    }
  }
}

렌즈를 사용해 보았지만 꽤 장황 해 보이며 잘못하고 있다고 생각합니다.

사실, 나는 새로운 물건을 돌려주는 것을 좋아합니다.

const res = fn(o)

{
  A: {
    B: {
      C: [
        {name: 'blah', value: 'vtha'}
        {name: 'vtha', value: 'blah'},
      ]
    }
  }
}


  • 답변 # 1

    불변의 방법으로하고 싶다면

    const fn = over(
      R.lensPath(['A', 'B', 'C']),
      R.map(
        o => o.name === 'blah' ? R.assoc('value', 'vtha', o): o
      )
    )
    
    

    데모.

    수동으로 함수를 정의하지 않으려면 매핑 된 함수를 다음으로 대체 할 수 있습니다

    R.ifElse(
      R.propEq('name', 'blah'),
      R.assoc('value', 'blah'),
      R.identity
    )
    
    

    그러나 중요한 삼항 연산자는 여기에서 더 읽기 쉬워 보입니다.

  • 답변 # 2

    필터를 사용하여 어디에서나 아래 예제를 썼습니다.

    const o = {
      A: {
        B: {
          C: [
            {name: 'blah', value: 'blah'},
            {name: 'vtha', value: 'blah'},
          ]
        }
      }
    };
    var pred = R.filter(R.where({name: R.contains('blah')}));
    pred(o.A.B.C);
    
    

  • 이전 reactjs - 증분 감소 카운트 문제 반응
  • 다음 javascript - 지시문에서 간단한 보안 문자를 다시로드하는 방법은 무엇입니까?