Js數(shù)組扁平化實現(xiàn)方法代碼總匯
題目:
請寫出一個數(shù)組拍平函數(shù)。效果如下:
var arr=['a', ['b', 'c'], 2, ['d', 'e', 'f'], 'g', 3, 4];
flat(arr) //a,b,c,2,d,e,f,g,3,4
方法一:使用toString方法先將arr轉(zhuǎn)換為一個字符串, 再以split分割為數(shù)組,再將數(shù)組里面的元素轉(zhuǎn)換為數(shù)字類型
var arr =['a', ['b', 'c'], 2, ['d', 'e', 'f'], 'g', 3, 4];
function flat(arr) {
return arr.toString().split(',').map(function(item){
return Number(item)
})
}
console.log(flat(arr))
方法二: toString 格式轉(zhuǎn)換 與方法一類似 都是隱士類型轉(zhuǎn)換
var arr = ['a', ['b', 'c'], 2, ['d', 'e', 'f'], 'g', 3, 4];
// 方法二:toString(格式轉(zhuǎn)換)
var flag = function(arr) {
let toString = Array.prototype.toString;
Array.prototype.toString = function() {
return this.join(',');
};
let result = arr + '';
Array.prototype.toString = toString;
return result;
};
console.log(flag(arr));
方法三: valueOf(格式轉(zhuǎn)換) 與方法一 二類似 都是隱士類型轉(zhuǎn)化原理
// 方法三:valueOf(格式轉(zhuǎn)換)
Array.prototype.valueOf = function() {
return this.join(',');
};
var flat = function(arr) {
return arr + '';
};
console.log(flat(['a', ['b', 'c'], 2, ['d', 'e', 'f'], 'g', 3, 4]));
方法四: 利用reduce特性
function flat(arr) {
return newArr = arr.reduce((a, b) => {
return a.concat(b)
}, [])
}
var arr = ['a', ['b', 'c'], '2', ['d', 'e', 'f'], 'g', 3, 4];
console.log(flat(arr));
方法五:利用遞歸
function flat(array) {
var result = [];
var each = function(arr) {
arr.forEach(item => {
if (item instanceof Array) {
each(item);
} else {
result.push(item);
}
});
};
each(array);
return result.join(',');
}
var arr = ['a', ['b', 'c', [7, 8]], 2, ['d', 'e', 'f'], 'g', 3, 4];
console.log(flat(arr));
方法六: ES6的遍歷器 Iterator 給數(shù)據(jù)結(jié)構(gòu)增加遍歷器必須增加一個next方法
// Iterator
Array.prototype[Symbol.iterator] = function() {
let arr = [].concat(this);
// arr=['a', ['b', 'c'], '2', ['d', 'e', 'f'], 'g', 3, 4]
let getFirst = function(array) {
let first = array.shift();
if (first instanceof Array) {
if (first.length > 1) {
arr = first.slice(1).concat(array);
}
first = first[0];
}
return first;
};
return {
next: function() { //類似與遍歷
let item = getFirst(arr);
if (item) {
return {
value: item,
done: false,
};
} else {
return {
done: true,
};
}
},
};
};
var flat = function(arr) {
let r = [];
for (let i of arr) {
r.push(i);
} // i 已經(jīng)是單個元素
return r.join(',');
};
var arr = ['a', ['b', 'c'], '2', ['d', 'e', 'f'], 'g', 3, 4];
console.log(flat(arr));
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript實現(xiàn)數(shù)字格式化的示例詳解
在處理數(shù)字時,為了提高可讀性,我們通常會將整數(shù)部分的數(shù)字以千分位或百分位分隔,本文將詳細介紹如何使用JavaScript來實現(xiàn)數(shù)字的千分位和百分位分隔,需要的可以參考下2024-04-04
js實現(xiàn)iGoogleDivDrag模塊拖動層拖動特效的方法
這篇文章主要介紹了js實現(xiàn)iGoogleDivDrag模塊拖動層拖動特效的方法,實例分析了javascript操作拖動層的技巧,需要的朋友可以參考下2015-03-03
JS結(jié)合bootstrap實現(xiàn)基本的增刪改查功能
這篇文章主要介紹了JS結(jié)合bootstrap實現(xiàn)基本的增刪改查功能,需要的朋友可以參考下2016-07-07
javascript中的undefined 與 null 的區(qū)別 補充篇
在Javascript中有兩個值用來代表類似空值的概念,undefined和null,這兩個很容易被混淆,他們表示的是兩個不同的概念。2010-03-03

