delete(arr[0]) //这里删除第一个,但是位置还是保留着
console.log(arr[0]) //undefined
6、splice()非纯函数
该方法向数组添加或者删除元素,返回被删除的项目,并同时改变原素组
splice(index,howmany,item1,…itemX)
index参数:必须,整数,规定添加或者删除的位置,使用负数,从数组尾部规定位置。
howmany参数:必须,要删除的数量,如果为0,则不删除项目。
tem1,…itemX参数:可选,向数组添加的新项目。
返回值:一个新的数组
//增加元素
let arr = [‘a’, ‘b’, ‘c’]
// 下标为1的位置开始替换,后面的一次向后移动
//第二个参数为0, 就不表示删除元素,只是添加元素
let a = arr.splice(1, 0, ‘james’)
console.log(arr) //[“a”, “james”, “b”, “c”]
console.log(a) // []
//增加元素和删除元素
let arr = [‘a’, ‘b’, ‘c’]
// 下标为1的位置开始替换,后面的一次向后移动
//第二个参数为0, 就不表示删除元素,只是添加元素
let a = arr.splice(1, 1, ‘james’)
console.log(arr) //[“a”, “james”, “c”]
console.log(a) // [‘b’]
//独特的用法
let array = [1,2,3,4,5];
let array2 = array.splice(3);
// 从下标3的位置开始删除
// array [1,2,3]
// array2 [4,5]
7、concat()
concat() 方法通过合并(连接)现有数组来创建一个新数组
方法不会更改现有数组。它总是返回一个新数组。
方法可以使用任意数量的数组参数
//传递一个参数
let a = [1,2,3]
let b = [4]
let c = a.concat(b)
console.log© //[1,2,3,4]
//传递两个参数
let a = [1,2,3]
let d = [5]
let b = [4]
let c = a.concat(b, d)
console.log© //[1, 2, 3, 4, 5]
8、slice()纯函数
slice() 方法用数组的某个片段切出新数组。
特点:返回一个新的数组,不会改变原来的数组
let a = [1,2,3]
let b = a.slice(2)
console.log(a) // [1,2,3] 原来的数组
console.log(b) //[3] 返回的新数组
9、sort()
- sort()不传递参数时,会以默认方式进行排序,就是以字母顺序进行排序,准确的讲就是按照字符编码的顺序进行排序。
let a = [1000,3,76,12,79]
let b = a.sort()
console.log(b) //[1000, 12, 3, 76, 79]
- 传递参数,使数组中按照顺序排列,就需要自己写一个函数了
let a = [1000,3,76,12,79]
let b = a.sort(function (a, b) {
return b - a;
})
console.log(b) //[3, 12, 76, 79, 1000]
- 数组乱序
a.sort(function(a,b){
return Math.random() - 0.5;
}
let arr = [{ age: 18, sex: 0 }, { age: 19, sex: 0 }, { age: 20, sex: 0 }, { age: 18, sex: 1 }, { age: 19, sex: 1 }];
arr.sort((a, b) => {
if (a.age === b.age) { //若年龄相同就按性别排,女士优先
return a.sex - b.sex;
} else { //年龄不相同就默认按年龄排升序
return a.age - b.age;
}
})
10、reverse()
反转数组
11、Math.max()和Math.min()
function myArrayMax(arr) {
return Math.max.apply(null, arr);
}
//Math.max.apply([1,2,3]) 等价于 Math.max(1,2,3)
12 、map()
参数:项目值(item, 必须)、项目索引(index, 可选)、数组本身(arr, 可选)
map()
方法通过对每个数组元素执行函数来创建新数组。
map()
方法不会对没有值的数组元素执行函数。
map()
方法不会更改原始数组。
let a = [1,2,3,4,5]
let b = a.map( x => x * 2)
console.log(a) //[1, 2, 3, 4, 5] 原数组
console.log(b) //[2, 4, 6, 8, 10] 新数组
13、forEach()
参数:项目值(item, 必须)、项目索引(index, 可选)、数组本身(arr, 可选)
forEach会遍历数组, 没有返回值, 不允许在循环体内写return, 不会改变原来数组的内容
forEach()也可以循环对象。
let a = [1,2,3,4,5]
a.forEach( x => console.log(x) )
14、filter()
filter 会过滤掉数组中不满足条件的元素, 把满足条件的元素放到一个新数组中, 不改变原数组
参数:项目值(item, 必须)、项目索引(index, 可选)、数组本身(arr, 可选)
结果:返回一个新的数组
let a = [1,2,3,4,5]
let b= a.filter(function (x) {
return x > 3
})
console.log(b) //[4,5]
15、reduce()
reduce() 方法在每个数组元素上运行函数,以生成(减少它)单个值。
reduce() 方法在数组中从左到右工作。
reduce() 方法不会改变原始数组。
参数:总数(初始值/先前返回的值)、项目值(item, 必须)、项目索引(index, 可选)、数组本 身(arr, 可选)
et array = [1, 2, 3, 4];
let temp = array.reduce((x, y) => {
return x + y;
});
console.log(temp); // 10
console.log(array); // [1, 2, 3, 4]
//x 是上一次计算过的值, 第一次循环的时候是数组中的第1个元素
//y 是数组中的每个元素, 第一次循环的时候是数组的第2个元素
16、every()
参数:项目值(item, 必须)、项目索引(index, 可选)、数组本身(arr, 可选)
every遍历数组, 每一项都是true, 则返回true, 只要有一个是false, 就返回false
let array = [1, 2, 3, 4];
let res = array.every((item, index, array) => {
return item > 2;
});
console.log(res); //false
17、some()
参数:项目值(item, 必须)、项目索引(index, 可选)、数组本身(arr, 可选)
some遍历数组, 只要有一个是true, 就返回true
let array = [1, 2, 3, 4];
let res = array.every((item, index, array) => {
return item > 2;
});
console.log(res); //true
以上6种方法注意
**以上均不改变原数组。
some、every返回true、false。
map、filter返回一个新数组。
reduce让数组的前后两项进行某种计算,返回最终操作的结果。
forEach 无返回值。**
18、indexOf() 和 lastindexOf()
indexOf(n) 检查n第一次出现的下标位置
lastIndexOf(n) 检查最后一次出现的下标位置
let a = [1,2,3,2,3]
console.log(a.indexOf(1)) //0
console.log(a.lastIndexOf(3)) //2
前端资料汇总
我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。
首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。
更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。
找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。
最后,祝愿大家在这并不友好的环境下都能找到自己心仪的归宿。