일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- git rebase
- 컨트렉트 배포 자동화
- 티스토리챌린지
- vue기초
- rust 기초
- 체인의정석
- 스마트컨트렉트테스트
- nest.js설명
- 머신러닝기초
- Vue.js
- 스마트 컨트렉트 함수이름 중복
- 오블완
- multicall
- 러스트 기초 학습
- 러스트기초
- ethers websocket
- ethers typescript
- ethers
- ethers type
- 스마트컨트렉트 함수이름 중복 호출
- ambiguous function description
- 프록시배포구조
- 스마트컨트렉트 예약어 함수이름 중복
- 러스트 기초
- chainlink 설명
- Vue
- 컨트렉트 동일한 함수이름 호출
- ethers v6
- 스마트컨트렉트프록시
- SBT표준
- Today
- Total
체인의정석
javascript Map vs filter 차이 본문
https://stackoverflow.com/questions/2442798/javascript-filter-vs-map-problem
자바스크립트에서 각 요소를 순회하며 검색하는 기능을 구현하고 있었다.
map의 경우 각 요소에 접근하여 정보를 수정하는 경우
filter는 각 요소에 접근하여 특정 정보를 리턴하는 경우 사용하면 좋다고 한다.
Quoted from:
JavaScript: The Definitive Guide
by David Flanagan
map()
The map() method passes each element of the array on which it is invoked to the function you specify, and returns an array containing the values returned by that function.
For example:
a = [1, 2, 3];
b = a.map(function(x) { return x*x; }); // b is [1, 4, 9]
뭔가 가공을 해서 전달해주어야 할때는 map을 쓰되
filter()
The method returns an array containing a subset of the elements of the array on which it is invoked. The function you pass to it should be predicate: a function that returns true or false. The predicate is invoked just as for forEach() and map(). If the return value is true , or a value that converts to true, then the element passed to the predicate is a member of the subset and is added to the array that will become the return value.
Examples:
a = [5, 4, 3, 2, 1];
smallvalues = a.filter(function(x) { return x < 3 }); // [2, 1]
everyother = a.filter(function(x,i) { return i%2==0 }); // [5, 3, 1]
특정 조건을 걸어서 리턴을 해주어야 할 때는 filter를 쓰면 된다고 한다.
나는 현재 fineOne과 같은 기능을 구현하므로 map 대신 filter를 사용하는 것이 맞는것 같다.
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 1 && word.length < 7 );
console.log(result);
> Array ["spray", "limit", "elite"]
한번 해보니 다음과 같이 비교 연산도 한줄안에 가능해져서 코드가 훨씬 깔끔해졌다.
여기서 더 깔끔하게 return 까지 한번에 시켜주자면
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => { return word.length > 1 && word.length < 7 });
console.log(result);
요런 식으로 해도 똑같은 결과가 나옴을 확인할 수 있었다.
근데 지금은 만약 값이 없다면 오류를 내면서 예외처리를 해주어야 하는 상황이다.
이럴때 체크용으로 사용하기 좋은 모듈은
일단 로그를 남겨야 하기 때문에 #log4js 그리고 비어있는지 확인해주는 모듈인 #lodash모듈 이다.
https://www.npmjs.com/package/lodash
const { getLogger } = require("log4js");
const { _ } = require('lodash');
요걸 해주고 예외처리를 추가한다.
lodash의 경우
_.isEmpty(비어있는지 체크하려는 자료)
이런 식으로 비어있는지 체크할 수 있는데 이건 상황에 맞게 추가하면 되고
const funcName = "search words";
try {
const result = words.filter(word => { return word.length > 1 && word.length < 7 });
} catch (error) {
logger.error(`[${funcName}] err:`, err)
}
요런식으로 예외처리까지 해주면 완성된다.
'개발 > backend' 카테고리의 다른 글
날짜를 포함한 json 파일을 생성하고 원래 형태로 읽어오는 법 (0) | 2022.11.11 |
---|---|
Mocha로 테스트 하기 팁 모음 (0) | 2022.11.11 |
자바스크립트 주석 달기 (업데이트) (0) | 2022.11.07 |
Class에서 static 사용하기 (2) | 2022.11.02 |
Node.js에서 자주 쓰이는 Javascript 문법 정리 1편 (0) | 2022.10.28 |