JS算法题目
输入:['a',[b,c],2,['d','e','f'],'g',3,4]
输出:a,b,c,2,d,e,f,g,3,4
解题思路
- 递归
- toString格式转换
- valueOf格式转换
- ES6遍历器 Symbol.iterator
1. 递归
// 方法一:递归
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));
2. toString格式转换
var arr = ['a', ['b', 'c'], 2, ['d', 'e', 'f'], 'g', 3, 4];
// 方法二:toString(格式转换)
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));
3. valueOf格式转换
// 方法三:valueOf(格式转换)
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]));
ES6遍历器 Symbol.iterator
// 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;
//};
let getFirst = function(array){
let first = array.shift();
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); }
return r.join(',');
};
var arr = ['a', ['b', 'c'], '2', ['d', 'e', 'f'], 'g', 3, 4];
console.log(flat(arr));