일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ethers typescript
- 머신러닝기초
- ethers
- multicall
- chainlink 설명
- ethers type
- 스마트컨트렉트테스트
- ambiguous function description
- 러스트 기초
- 스마트컨트렉트프록시
- 오블완
- 스마트 컨트렉트 함수이름 중복
- 컨트렉트 배포 자동화
- SBT표준
- 컨트렉트 동일한 함수이름 호출
- 프록시배포구조
- 러스트기초
- 러스트 기초 학습
- rust 기초
- ethers v6
- vue기초
- 티스토리챌린지
- ethers websocket
- 스마트컨트렉트 함수이름 중복 호출
- git rebase
- Vue.js
- Vue
- nest.js설명
- 스마트컨트렉트 예약어 함수이름 중복
- 체인의정석
- Today
- Total
체인의정석
javascript) 한 객체에 다수의 배열이 있을때 some 함수로 모두 검색하는 방법 (find vs indexOf vs some) 본문
javascript) 한 객체에 다수의 배열이 있을때 some 함수로 모두 검색하는 방법 (find vs indexOf vs some)
체인의정석 2023. 8. 7. 09:33하나의 객체 안에 2개의 배열이 들어가 있는 상황이다.
const tokensArr = TOKENS.map(t => {
const path = {};
path.paths = t.paths;
path.paths_v3 = t.paths_v3;
path.tableName = t.tableName;
path.address = t.address;
return path
})
이런식으로 paths라는 배열과 paths_v3라는 배열이 있는데 두 배열을 모두 검색해서 내가 찾고자 하는 값이 양쪽 배열 중에 한쪽에 포함이 되어 있는지를 검토하는 함수를 짜고 싶었다.
평소에 자주 쓰던 filter가 생각나서 먼저 filter를 사용하려고 챗 gpt에게 물어보니 챗 gpt는 some 함수를 추천해주었다.
checkPools(poolAddress) {
const hasPoolAddress = tokensArr.some(token =>
token.paths.some(path => path === poolAddress) ||
token.paths_v3.some(path_v3 => path_v3 === poolAddress)
);
console.log("Pool Address Found:", hasPoolAddress);
return hasPoolAddress; // Returns true if poolAddress is found, otherwise false
}
보면 some 함수 안에 some 함수가 2개 있는데 이렇게 배열안의 한 요소안에 또 배열이 있고 그 배열 중 하나라도 값이 포함되어있는지 찾아서 bool 형태로 값을 도출하고 싶다면 위와 같이 사용하면 된다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/some
const array = [1, 2, 3, 4, 5];
// Checks whether an element is even
const even = (element) => element % 2 === 0;
console.log(array.some(even));
// Expected output: true
기본 예제는 위와 같은데 만약 같은 값을 찾았다면 그 즉시 탐색을 멈추고 바로 true를 리턴하고 모든 요소를 다 검색해도 같은 값이 나오지 않았다면 false를 리턴하고 종료가 된다고 한다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/find
기존에 많이 쓰던 것 중 find 나
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
indexOf 도 요소를 찾다가 찾으면 해당 값 또는 해당 값의 인덱스를 리턴해 주는 배열 검색 함수들이 있었는데
만약 bool 값을 리턴하고자 한다면 앞으로는 바로 some을 사용하면 될 것 같다.
3 함수의 속도가 궁금하여 지피티에게 물어보니
Both the some method and the indexOf or find methods are used to search for an element within an array. In terms of performance, the differences are typically negligible for small arrays. However, when comparing the three methods:
some(): This method will iterate over the array and return as soon as a match is found. It doesn't continue checking other elements once it finds a match.
indexOf(): This method is used primarily for arrays of primitive values (like numbers or strings). It returns the index of the first occurrence of a specified value, or -1 if the value is not found. It will also exit as soon as it finds the value.
find(): This method returns the value of the first element in the array that satisfies the provided testing function. Like some, it will also exit as soon as it finds a match.
For your specific use-case:
If you're checking arrays of primitive values (like strings), indexOf might be a bit faster than some or find but the difference would typically be negligible unless you're dealing with very large arrays.
If you're checking arrays of objects or need a more complex matching condition, you would use find or some since indexOf would not be applicable.
속도 자체는 indexOf 가 가장 빠르지만 큰 상관은 없고 검색 조건이 복잡하다면 some이나 find를 쓰라고 한다.
셋다 상관 없지만 인덱스를 리턴할지 값을 리턴할지 bool을 리턴할지에 따라서 다르게 사용하면 될것 같다.
'개발 > backend' 카테고리의 다른 글
Bignumber.js 사용하여 데이터 처리하기 (0) | 2023.08.25 |
---|---|
UniswapV3 백엔드 구축하며, 틱 단위 계산에 사용한 다시 볼 것 같은 함수들 정리 (tickSpace 맞추기, 데이터 쌓는 지점 체크 & 동일 블록에서의 값 합산, Promise.all의 중첩 사용) (0) | 2023.08.24 |
map으로 객체안의 값 null 일 경우 0으로 바꾸기 (0) | 2023.07.24 |
node.js에서 API로 파일 다운 및 압축 파일 다운 받게 만들기 (블록체인 프로젝트 DB정합성 검사기 제작) (0) | 2023.05.17 |
node.js에서 파일만들기, 폴더만들기, 읽어오기 (fs 기능들 정리) - DB데이터 교차검증 시 사용한 함수들 정리 (0) | 2023.04.21 |