blog

問題17 配列の平坦化

配列の平坦化とは、多次元配列を1次元配列にする処理 flatreducetoString&&splitjoin&&split(Num のみ)...

Sep 13, 2020 · 2 min. read
シェア

配列の平坦化とは

多次元配列を一次元配列にすることです。

[1, [2, 3, [4, 5]]] ------> [1, 2, 3, 4, 5]

flat()

const arr = [1, [2, 3, [4, 5],["a",{a:1}]]];
var arr4 = [1, 2, , 4, 5];
arr4.flat(); // [1, 2, 4, 5]
arr.flat(Infinity);

reduce

// String Number Object
const arr = [1, [2, 3, [4, 5],["a",{a:1}]]];
function change(arr){
 return arr.reduce((result,item,index,self)=>{
 return result.concat(Array.isArray(item) ? change(item) : item);
 },[]);
}
console.log(change(arr));

toString && split

const arr = [1, [2, 3, [4, 5],["a"]]];
function change(arr){
 return arr.toString().split(',').map(item=>{
 return Number(item) ? Number(item) : item;
 });
}
console.log(change(arr));

join && split

const arr = [1, [2, 3, [4, 5],["a"]]];
function change(arr){
 return arr.join(',').split(',').map(item=>{
 return Number(item) ? Number(item) : item;
 });
}
console.log(change(arr));

map &&

const arr = [1, [2, 3, [4, 5],["a",{a:1}]]];
function change(arr){
 let newArr = [];
 arr.map(item=>{
 if(Array.isArray(item)){
 newArr = newArr.concat(change(item));
 }else{
 newArr.push(item);
 }
 });
 return newArr;
}
console.log(change(arr));

拡張演算子

const arr = [1, [2, 3, [4, 5],["a",{a:1}]]];
function change(arr){
 while(arr.some(item=>Array.isArray(item))) {
 //  [].concat(...arr)になる。[] ,[2,3]配列にマージする。[1,2,3]
 arr = [].concat(...arr);
 }
 return arr;
}
console.log(change(arr));
Read next

比較プログラミング

ソースコードの前に秘密はない」ということわざは、部分的にしか真実ではありません。目の前に偉大な文学作品があるようなもので、すべての単語を読むことができても、その機微を見抜くことはできないかもしれません。そのためには通常、優れた読者であるか、優れた作家である必要があります。プログラマーとして、ソースコードに含まれる秘密を察知する能力は、プログラミングの能力、プロジェクトの背景に関する知識......に依存します。

Sep 13, 2020 · 2 min read