1、不使用for循环,实现一个方法,传入m n两个参数,返回一个长度为m,每项为n的数组
(1)递归,使用递归也特别注意return的使用。
function func(m, n) {
if(typeof m !== "number" && m <= 0){
return arr;
}else {
arr[arr.length] = n;
return arguments.callee(m-1, n);
}
}
console.log(func(8, 5)); [5, 5, 5, 5, 5, 5, 5, 5]
(2)类数组转数组后,调用map方法。Array.from得到是长度为m值为undefined的数组。不是空数组。
function func(m, n) {
var arrObj = {
length: m
}
return Array.from(arrObj).map(() => n);
}
console.log(func(8, 5));
其实Array.from,第二个参数是一个处理函数,跟map的效果一样:
function func(m, n) {
var arrObj = {
length: m
}
return Array.from(arrObj, () => n);
}
console.log(func(8, 5)); [5, 5, 5, 5, 5, 5, 5, 5]
以下方式得到的还是空数组。调用map方法无效。
function func(m, n) {
var arr = [];
arr.length = m;
return arr.map(() => n);
}
2、编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
var result = [];
arr.toString().split(",").sort((a,b)=>a-b).map((item,index)=>{
//split的拆分使得数组的每项都是字符串类型
result.indexOf(item) == -1 ? result.push(Number(item)) : "";
});
console.log(result); [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14]
数组的toSting会去处理数组每项及其子项,得到字符串:1,2,2,3,4,5,5,6,7,8,9,11,12,12,13,14,10。toSting就是拆除所有的中括号
split按逗号查分字符串:["1", "2", "2", "3", "4", "5", "5", "6", "7", "8", "9", "11", "12", "12", "13", "14", "10"]。使得每项都成了字符串类型。
3、请把两个数组 ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'] 和 ['A', 'B', 'C', 'D'],合并为 ['A1', 'A2', 'A', 'B1', 'B2', 'B', 'C1', 'C2', 'C', 'D1', 'D2', 'D']。
var arr1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'];
var arr2 = ['A', 'B', 'C', 'D'];
arr2.map((item, index) => {
arr1.splice((index+1)*2 + index,0,item);
})
console.log(arr1); ["A1", "A2", "A", "B1", "B2", "B", "C1", "C2", "C", "D1", "D2", "D"]