Object.values()를 배열 체인에 주입하는 방법

3876 단어 javascript
나는 연쇄 기능을 좋아한다.

패턴에 대한 나의 첫 번째 경험은 jQuery 호출을 연결하는 JavaScript에서였습니다. Underscore가 나왔을 때 chain 기능을 사용하여 더 빠르고 깔끔한 코드를 작성했습니다. 그것을 사랑!

ES6+가 얼마나 더 나은지에도 불구하고 여전히 우아하게 해결할 수 없는 한 가지 경우가 있습니다. 즉, 체인에 개체가 있고 일반적으로 reduce 출력이지만 다음과 같이 체인에서 반복하고 싶을 때입니다. 어레이라면.

Array에 Lodash thru 와 같은 메커니즘이 있어 체인에 있는 동안 개체에 대해 작업할 수 있는 기회를 제공하면 좋겠지만 그렇지 않습니다. 예를 들어 다음은 불가능합니다.

['foo', 'bar']
  .reduce((acc, val) => {
    acc[val] = {...};
    return acc;
  }, {})
  .thru(obj => Object.values(obj)) // Chain reduce's output
  .sort((a, b) => {...})


그러나 reduce 의 콜백에서 return 문으로 창의력을 발휘하여 비슷한 결과를 얻을 수 있습니다.

['foo', 'bar']
  .reduce((acc, val, i, arr) => {
    acc[val] = {...};
    // On the last iteration return something chainable 
    return i === arr.length - 1 ? Object.values(acc) : acc;
  }, {})
  .sort((a, b) => {...})


이 패턴을 사용하면 일반적으로 별도로 수행하고 다시 패치해야 하는 체인에서 더 많은 작업을 수행할 수 있습니다.

개체를 연결 가능하게 만드는 다른 접근 방식을 알고 있습니까?

좋은 웹페이지 즐겨찾기