[JavaScript] 조작tips를 살짝 배열합니다.

개시하다


데이터베이스 등에서 얻은 배열 데이터를 좋은 느낌으로 가공하여 다른 배열을 하거나 수조 간의 적화를 구하는 경우가 있다고 생각합니다.
다음은 세 가지 배열 조작의 유창한 글씨 tips를 적습니다.
두뇌 체조의 정도를 보세요!!

[1,2,3,4,5]를 [0,1,3,6,10,15]


이것은 어떤 배열 데이터를 접선 도표 등에서 사용하는 데이터로 가공하려고 할 때의 상황이다.
처음에는 0부터 시작해서 첫 번째는0+1=1, 두 번째는1+2=3처럼 가공하여 쌓은 배열이다.
이런 배열 가공을 누적화(Cumultive sum)라고 한다.
다음은 스크랩 의견 모집입니다. @spdbera씨가 저에게 좋은 아이디어를 주셨기 때문에 이번에는 두 가지를 채택했습니다.
나도 내가 생각하는 지나친 글씨를 썼는데...
https://zenn.dev/rpf_nob/scraps/4eb43ab79755e9

패턴1⃣


let에서 변수temp를 새로 사용하고 mapスプレッド演算子「...」로 새 배열을 만듭니다.
처리 자체는 이해하기 쉬우나 여분의 변수가 필요합니다...
const dataset = [1, 2, 3, 4, 5];
let temp = 0;
const result = [0, ...dataset.map((data) => temp += data)]

모드 2⃣


함수의 가리화를 사용하여 mapスプレッド演算子「...」 새로 배열합니다.
아로 함수를 사용하면 여분의 변수가 증가하지 않고 처리 자체도 한 줄로 쓸 수 있기 때문에 유창하게 쓴다.
다만, 작법이 이해하기 어려워 자신 같은 초보자는 처음 봤을 때 "어!?"이 가능하다, ~할 수 있다,...
const dataset = [1, 2, 3, 4, 5];
const result = [0, ...dataset.map((sum => value => sum += value)(0))]

[1,2,3,4.5]를 [6.6,13.2,19.8.4.3.0]으로 설정


다음은 수조 데이터를 비례수조 데이터로 직접 가공하려는 경우다.
사사오입 할애.Math.round나lodash를 사용하십시오.
제작하지 않고
const dataset = [1, 2, 3, 4, 5];
const sum = dataset.reduce((acc, cur) => acc + cur, 0);
const result = dataset.map((data) => (data / sum) * 100);
sum에서 직접map에서 계산하면 한 줄로 쓸 수 있지만 계산량이 늘었으니 이게 좋을 것 같아요.

[1,2,3,4.5]와 [10.15,0.25,0.30,0.10,0.20]에서 2.95를 구하다


다음은 수조 데이터 간의 적화이다.1 × 0.15 + 2 × 0.25 + 3 × 0.30 + 4 × 0.10 + 5 × 0.20에서 보듯이 계산수 그룹의 같은 인덱스 간의 곱셈의 합.
excel에서 말한 sumproduct 함수입니다.reduce를 사용하여 세 번째 파라미터의 index를 비율 데이터cur × percent_dataset[idx]에 건네주고 같은 index 간의 적을 더하면acc에 실현할 수 있다.
const base_dataset = [1, 2, 3, 4, 5]; // 元データ
const percent_dataset = [0.15, 0.25, 0.30, 0.10, 0.20]; // 比率データ
const result = base_dataset.reduce((acc, cur, idx) => acc + cur * percent_dataset[idx], 0)
참고로 [1,2,3,4,5]처럼 반드시 연호여야 하는 경우에도 다음과 같은 내용을 쓸 수 있다.
평균 순위를 계산하고 싶을 때 이쪽이 비교적 우뚝 솟아 있다.
const percent_dataset = [0.15, 0.25, 0.30, 0.10, 0.20]; // 比率データ
const result = percent_dataset.reduce((acc, cur, idx) => acc + cur * (idx + 1), 0)

최후


이번에는 약간의 배열 조작 tips를 썼다.
만약 다른 생각이 있다면, 나는 보충할 것이다!!
이거 좀 더 깔끔하게 쓰는 거 아닌가요??내가 잘못했어!!그렇다면 꼭 메모 남겨주세요!!

참고 자료


https://stackoverflow.com/questions/20477177/creating-an-array-of-cumulative-sum-in-javascript/55261098
https://qiita.com/Yametaro/items/99cc1c8ebcfc703b1410

좋은 웹페이지 즐겨찾기