サービス
サービスを探す
プロ人材を探す
仕事を探す
ブログを探す
![[Javascript] 配列操作小ネタ集 最大、最小、平均、合計、分散、標準偏差、重複削除、割り込みなど](https://d3vjgmbflpysnn.cloudfront.net/blogs/blog-cover-image%2F8c4ec6ab-f5f1-4328-a3fd-24c0214a4147%2Fgambling-gade4c38e8_1280.jpg)
const array01 = [1,6,2,5,8,7,3,4,9,2,6,8,1,3,5];
const array02 = [10,15,20,5,35,25,30];
const arrayRandom = arr => {
arr.forEach((_, i) => {
const j = Math.floor(Math.random() * (i + 1));
[arr[i], arr[j]] = [arr[j], arr[i]];
});
return arr;
};
console.log(arrayRandom(array01));
// 出力例 [6,8,9,8,4,3,1,5,2,6,7,2,1,3,5];
const getTargetNum = (arr, target) => arr.filter(val => val === target).length || 0;
console.log(getTargetNum(array01, 5));
// 2
console.log(getTargetNum(array01, '5'));
// 0
const uniqueArr = [...new Set(array)];
console.log(uniqueArr);
// [1,6,2,5,8,7,3,4,9]
const unique = arr => arr.filter((val, i, arr) => arr.indexOf(val) === i);
console.log(unique(array01));
// [1,6,2,5,8,7,3,4,9]
const intoArr = (arr, current, into) => {
current = current >= arr.length? arr.length-1: current;
into = into >= arr.length? arr.length-1: into;
const target = arr[current];
arr.splice(current, 1);
arr.splice(into, 0, target);
return arr;
};
console.log(intoArr(array01, 3, 0));
// [5,1,6,2,8,7,3,4,9,2,6,8,1,3,5]
console.log(intoArr(array01, 5, 2));
// [5,1,7,6,2,8,3,4,9,2,6,8,1,3,5]
const chunkedArr = (arr, num) => arr.flatMap((_, i, arr) => i % num? []: [arr.slice(i, i+num)]);
console.log(chunkedArr(array01, 3));
// [[1,6,2],[5,8,7],[3,4,9],[2,6,8],[1,3,5]]
console.log(chunkedArr(array02, 3));
// [[10,15,20],[5,35,25],[30]]
const max = arr => arr.sort((a,b) => b-a)[0];
console.log(max(array01));
// 9
const min = arr => arr.sort((a,b) => a-b)[0];
console.log(min(array01));
// 1
const max = Math.max(...array02);
console.log(max);
// 35
const min = Math.min(...array02);
console.log(min);
// 5
スプレッド構文の (...) と apply のどちらも、配列に膨大な要素があった場合は、配列の要素を関数の引数として渡そうとするため、失敗したり、誤った結果を返したりすることがあります。
MDNより引用
const sum = arr => arr.reduce((a,b) => a+b);
console.log(sum(array02));
// 140
const avr = arr => arr.reduce((a,b) => a+b)/arr.length;
console.log(avr(array02));
// 20
const variance = arr => {
const avr = arr.reduce((a,b) => a+b)/arr.length;
return arr.reduce((a,b) => (a + ((c - avr) ** 2)),0)/arr.length;
};
console.log(variance(array02));
// 100.0
const stdev = arr => {
const avr = arr.reduce((a,b) => a+b)/arr.length;
const Var = arr.reduce((a,c) => (a + ((c - avr) ** 2)),0)/arr.length;
return Math.sqrt(Var);
};
console.log(stdev(array02));
// 10.0
// 先述の分散処理(variance)が既に定義されていれば、以下のようにワンライナーで記述できます。
const stdev = arr => Math.sqrt(variance(array02));