面试题
记一道我之前面试的时候的一道题:完整的题面不记得了,只记得大概要求
- 基础题: 写一个方法:传参数字,若传参3,生成类似如下表格
1 | 1 | 1 |
---|---|---|
2 | 2 | 2 |
3 | 3 | 3 |
传参4的话,生成如下表格
1 | 1 | 1 | 1 |
---|---|---|---|
2 | 2 | 2 | 2 |
3 | 3 | 3 | 3 |
4 | 4 | 4 | 4 |
以此类推
我的思路是:
num
为传参,先初始化一个长度为num
的数组,数组元素填充1;初始化一定长度的数组:new Array(length)
,数组填充值.fill()
;- 遍历数组,给每个元素初始化为长度为
num
的数组,并填充索引值+1;这里用到map
遍历方法,map
需要return
function arr(num){
return new Array(num).fill(1).map((item,i)=>{
return new Array(num).fill(i+1);
});
}
复制代码
运行结果如下:
2. 扩展题 在1的基础上,变换下生成的表格内容,如下:
1 | 2 | 3 |
---|---|---|
6 | 5 | 4 |
7 | 8 | 9 |
1 | 2 | 3 | 4 |
---|---|---|---|
8 | 7 | 6 | 5 |
9 | 10 | 11 | 12 |
16 | 15 | 14 | 13 |
以此类推
我的思路是:
-
在1的基础上,初始化
num
长度的数组,数组填充1 -
map
方法,给数组中元素再初始化长度为num
的数组,预设1,首位预设索引*num + 1
,这里要注意的是,一定要给数组预设一个值,否则,new Array(num)
出来的数组实际上是empty*num
,都是空的,遍历器无法遍历取到index
跟item
,如下图 -
二维数组再
map
遍历一次,除去第一个值,剩余值累加+1 -
判断奇数行和偶数行,从0数起,奇数行需要
reverse()
,奇偶数通过对2取余
判断 -
return arry;
将拼接完成的数组返回出来
function arr(num){
let array = new Array(num).fill(1).map((item,i)=>{
let arrItem = new Array(num).fill(1).fill(i*num + 1, 0 ,1);
let res = arrItem.map((val, key) => { return key === 0 ? val : key+arrItem[0];});
return i%2 === 1 ? res.reverse() : res;
});
return array;
}
复制代码
运行结果如下:
反思
这次笔试题,写完后自己在console
里面试了下发现有问题,forEach
和 map
用错了,reduce
方法也用错了~
基础还是不够扎实,于是趁这次机会要来巩固下数组字符串切割等的各种方法了~
map
遍历
不会改变原来的数组,返回一个新数组
forEach
遍历
用于对数组中元素进行操作,不改变原数组的值,返回值为undefined
filter
过滤器 筛选数组
filter
用来筛选符合条件的值,返回一个新的数组,不会对原来数组进行修改
reduce
求数组总和
常见用法如下:
- 不额外传参:
reduce((sum,item,index)=>{return sum+item})
该方法表示从数组的第1个(即索引值index
为1)开始循环,sum
初始值为数组下标为0的值 - 传初始值:
reduce((sum,item,index)=>{return sum+item}, initData)
该方法表示,从数组第0个(即索引值index
为0)开始循环,sum
初始值为initData
fill
方法 给数组批量填充值
fill
用于给数组初始化赋值,常见用法有以下
array.fill(data)
: 只传一个参,表示给数组每个元素赋值data
array.fill(data, startIndex, endIndex)
: 表示给数组索引值为startIndex
到endIndex
之间的赋值data
array.fill(data, startIndex)
: 表示给数组从startIndex
索引值开始赋值data
splice
方法
array.splice(index, howmany ,item1……itemX)
删除或新增元素,会修改到原有数组,若删除,返回删除元素组成的数组
arr.splice(index, 0, item1……itemX)
表示从index
索引后插入item……itemX
数据
arr.splice(index, howmany)
表示从index
索引开始删除howmany
个值,返回被删除元素组成的数组
arr.splice(index, howmany, item1……itemX)
表示从index
索引开始删除howmany
个值,并插入item……itemX
数据,返回被删除元素组成的数组
split
方法
str.split()
, 指定分隔符将字符串分割成数组,分隔符传参可为字符串或者正则
slice
方法
slice(start[, end])
, start
end
为正整数或负整数,用于切割字符串,不改变原有字符串
substring
substring(start[, end])
, start
end
均为非负整数,用于切割字符串,不改变原有字符串
substr
substr(start[, length])
, start
可为负数,表示倒数第几个,用于切割字符串,不改变原有字符串
总结
1、会改变原有数组或字符串的方法
splice
:原有数组进行新增或删除操作,并且返回被删除元素组成的数组fill
: 原有数组预填值
2、不会改变原有数组或字符串的方法
slice(start[, end])
: 返回切割的字符串,start
和end
可为负数substring(start[, end])
: 返回切割的字符串,start
和end
不可为负数substr(start[, length])
: 返回切割的字符串,start
可为负数split()
: 指定分隔符分割成数组,分隔符可用字符串或正则filter
: 过滤器,返回符合要求的数组forEach
: 遍历数组,对每个元素进行操作,返回值为undefined
reduce
: 求和方法map
: 对原有数组进行操作,返回一个新数组
3、记一些别的常用的方法
findIndex
: 返回符合要求的第一个索引find
: 返回符合要求的第一个item
some
: 若有满足条件的值则返回true
,否则返回false
every
: 若所有值都满足条件返回true
,否则返回false
includes
: 数组中若包含某一项返回true
,否则返回false