JavaScript配列展開(扁平化)とundersscoreのflaten
2973 ワード
元のアドレス配列展開とは、ネストされた配列を平坦化(1次元に変換)eg:
配列はtoStringを呼び出して
s 6を利用して構造方法を追加して、層を抽出する方法があります.
先にコードを入れます
const arr=[[[1, 2], [1, 2, 3]], [1, 2]] => [1, 2, 1, 2, 3, 1, 2]
console.log(flatten(arr)) //[1,2,1,2,3,1,2]
1、各項目が配列かどうかを判断し、再帰的にconst arr=[[[1, 2], [1, 2, 3,"a"]], [1, 2,"a"]]
function flatten(arr){
let result=[]
for(let i=0,l=arr.length;i
2、toString配列はtoStringを呼び出して
"1,2,1,2,3,1,2"
に配列を変換し、split(",")
を実行する方法は["1", "2", "1", "2", "3", "1", "2"]
になることができ、またすべてのパラメータを数字に変換する必要があるので、このような方法が足りないのは、配列の中に[1,2,3,"4","5"]
が数字と文字列があると
になることである.const arr=[[[1, 2], [1, 2, 3]], [1, 2]]
function flatten(arr){
return arr.toString().split(",").map(item => {
//
return +item
})
}
console.log(flatten(arr),arr)
3、reduce方法const arr=[[[1, 2], [1, 2, 3,"a"]], [1, 2,"b"]]
function flatten(arr){
return arr.reduce((pre,next) => {
return pre.concat(Array.isArray(next) ? flatten(next) : next) //
},[])
}
console.log(flatten(arr),arr)
4、解決の方法s 6を利用して構造方法を追加して、層を抽出する方法があります.
const arr=[[[1, 2], [1, 2, 3,"a"]], [1, 2,"b"]]
function flatten(arr){
while(arr.some(item => Array.isArray(item))){
// ,
arr=[].concat(...arr)
}
return arr
}
console.log(flatten(arr),arr)
5、js原生方法flatflat(depth)
方法は、指定された深さに従って配列を巡回し、全ての要素をエルゴードされたサブアレイの要素と結合して新しい配列に戻す.パラメータdepth
は、ネスト配列を抽出する構造深さを表し、デフォルトは1である.const arr=[[[1, 2], [1, 2, 3,"a"]], [1, 2,"b"]]
arr.flat(Infinity)
6、Underscore.jsのflaten方法先にコードを入れます
/**
* param {Array} input
* param {Boolean} shallow , true , , false
* param {Boolean} strict ,
* param {Array} output
*/
var flatten = function(input, shallow, strict, output = []) {
var idx = output.length;
for (var i = 0, length = getLength(input); i < length; i++) {
var value = input[i];
// flatten
if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
if (shallow) {
//
var j = 0, len = value.length;
while (j < len) output[idx++] = value[j++];
} else {
// ,
flatten(value, shallow, strict, output);
idx = output.length;
}
} else if (!strict) {
output[idx++] = value;
}
}
return output;
};
output
は、リターン・配列をパラメータ伝達として省き、再帰時にデータの層のreturn
を前の層に送ることができ、性能的には向上します.最後の反復が配列でない場合はshallow
に進み、false
がstrict
である場合は、この分岐に入ることはない.true
は永遠に動作しない.