题目如下:
第一题: 给定一个多为数组arr,实现一个方法获取数组的最大深度(维度)
例子1:arr=[1,2,[3,4,[6]]] 则返回3
例子2:arr=[3,4,[6]] 则返回2
最终代码:(此处只解决单项维度问题)
var arr=[5,[6,7,8,[3,[9]]]]
function deep(arr,count=0){
count++;
for(var i=0;i<arr.length;i++){
if(Object.prototype.toString.call(arr[i]) == '[object Array]'){
count= deep(arr[i],count);
}
}
return count;
}
console.log(deep(arr))
未解决多项维度问题,例如:arr=[1,2,[3,4,5],[2,3,4[6]]];
最终代码1:
var arr= [1,2,[3,4],[5,6,7,[9]]]
function test4(arr = []) {
let arrDeepLen = [];
for (let i = 0; i < arr.length; i++) {
let item = arr[i];
if (Array.isArray(item)) {
const c= test1(item);
arrDeepLen.push(c+1);
}
}
function test1(arr = [], count = 0) {
count++;
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
if (Array.isArray(item)) {
count = test1(item, count);
}
}
return count;
}
return Math.max.apply(null,arrDeepLen);
}
最终代码2:
function deep(arr, count = 0, num = []) {
count++
for (let index in arr) {
if (Array.isArray(arr[index])) {
deep(arr[index], count, num)
} else {
num.push(count)
}
}
return Math.max.apply(null, num)
}
let arr = [1, 2, 3, ['n', 'i', ['t', ['nihao']]], ['a', 'b']]
console.log(deep(arr))
考察范围:回调,此处注意回调堆栈的执行顺序,需要对每次执行返回的数赋值
第二题: 实现一个方法,生成数组[1,2,3,4,...99],然后将数组内的项随机打乱,每一个数 出现在任意一位置的概率相同。
最终代码:
function randomArray(){
let arr=[];
for(var i=0;i<100;i++){
arr.push(i)
}
arr.sort(function(){return Math.random()-0.5});
return arr;
}
randomArray()
第三题:给定一个数组arr 和一个数值target,数组内的每一项都是数组,如果数组的x,y相加等于target,则把这俩项以[x,y]的格式放到一个空数组中,写一个方法,有满足条件到项,并返回最后的数组。
注:如[4,6]与[6,4]则是等价,只允许在结果中出现一次。
例子1: arr=[1,2,4,7,3,6] target=10 则返回:[[4,6],[7,3]]
例子2: arr=[1,2,4,7] target=10 则返回:[]
最终代码:
let arr=[1,2,3,5,7,8];
function test(arr,target=10){
let newArr =[]
for(var i=0;i<arr.length;i++ ){
for(var j=i+1;j<arr.length;j++){
let sum=arr[i] + arr[j]
if(sum === target){
newArr.push([arr[i],arr[j]]);
}
}
}
return newArr;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。