1:数组去重
// 方法1 es6 set 方法
function noRepeat(arr) {
return [...new Set(arr)]
}
//方法2
// IE8以下不支持数组的indexOf方法
function uniq(array){
var temp = []; //一个新的临时数组
for(var i = 0; i < array.length; i++){
if(temp.indexOf(array[i]) == -1){
temp.push(array[i]);
}
}
return temp;
}
var newArray = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(newArray));// [1, 2, 4, 9, 6, 7, 5, 3]
//方法3: 双for循环
function reRepeat(arr){
for(var i =0;i < arr.length;i++){
for(var j = i+1;j<arr.length;j++){
if(arr[j] == arr[i]){
arr.splice(j,1)
j-- //删除后下标减一,防止错过相同元素
}
}
}
return arr
}
console.log(reRepeat(newArray))
2:查找数组内最大值和最小值
function arrayMax(arr) {
return Math.max(...arr);
}
function arrayMin(arr) {
return Math.min(...arr);
}
3:返回已size为长度的数组分割的原数组
function chunk(arr, size) {
return Array.from({
length: Math.ceil(arr.length / size)
}, (v, i) => arr.slice(i * size, i * size + size));
}
var arr = [1,2,3,4,5,6]
console.log(chunk(arr,2)) // [[1,2],[3,4],[5,6]]
4: 数组中某元素出现的次数
function countOccurrences(arr, value) {
return arr.reduce((a, v) => v === value ? a + 1 : a + 0, 0);
}
console.log(countOccurrences(arr,1)) // 2
5:扁平化数组 (展开多维数组 形成一维数组 -1 代表全部展开 其余值代表展开几维)
var arr3 = [[1,2],[3,4,[33,44]],[5,6],7,8]
function flatten(arr, depth ) {
if (depth === -1) {
return [].concat(...arr.map(v => Array.isArray(v) ? this.flatten(v) : v))
}
if (depth === 1) {
return arr.reduce((a, v) => a.concat(v), []);
}
return arr.reduce((a, v) => a.concat(Array.isArray(v) ? this.flatten(v, depth - 1) : v), [])
}
console.log(flatten(arr3,-1)) // [1, 2, 3, 4, 33, 44, 5, 6, 7, 8]
console.log(flatten(arr3,1)) // [1, 2, 3, 4, [33,44], 5, 6, 7, 8]
6:对比两个数组并且返回其中不同的元素 或者相同的值 返回一个数组
var arrA = [1,2,3,4]
var arrB = [1,2,3,5,6,7,4]
function diffrence(arr1, arr2) {
return arr1.concat(arr2).filter(function(v, i, arr) {
return arr.indexOf(v) === arr.lastIndexOf(v);
});
}
console.log(diffrence(arrA, arrB)) // [5,6,7]
function intersection(arr1, arr2) {
return arr2.filter(v => arr1.includes(v))
}
console.log(intersection(arrA, arrB)) // [1,2,3,4]
7:从右删除n个元素 返回删除后的剩余数组
function dropRight(arr, n) {
return n < arr.length ? arr.slice(0, arr.length - n) : [];
}
console.log(dropRight(arrA,1)) // [1,2,3]
console.log(dropRight(arrA,3)) // [1]
8:乱排
var arrC = [1,2,3,4,5,6,7]
function shuffle(arr) {
let array = arr
let index = array.length
while (index) {
index -= 1
let randomInedx = Math.floor(Math.random() * index)
let middleware = array[index]
array[index] = array[randomInedx]
array[randomInedx] = middleware
}
return array
}
console.log(shuffle(arrC)) // [5, 3, 1, 7, 6, 4, 2]
9: slice 方法
// slice(start,end)表示从下标start开始到下标end(不包括end)进行截取,得到的是一个新数组,不改变原数组。当start为负值时表示从倒数第几个元素开始往后截取,不填end的话就表示从倒数第几个元素开始截取,一直截取到数组末尾元素。
var arrD = [1,2,7,2,6,0,3,1,5,7,8,9,45,12,34,0,56,12,2]
var sliceArr = arrD.slice(-2)
console.log(sliceArr,"sliceArr") // [12, 2]
var sliceArr = arrD.slice(2,4) // [7, 2]
console.log(sliceArr,"sliceArr")
10:splice 方法 会改变原数组
// splice()方法有三个参数,分别表示从哪个下标开始,删几个,新元素。可以实现增加,删除,替换数组元素的功能。arr.splice(-5,5)表示从倒数第五个元素开始,删五个元素。巧妙的是该方法的返回值是删除的元素集合。同时该方法改变了原数组。原数组变成了除了删除的元素剩下的元素集合。
var sliceArr1 = arrD.splice(-3,3)
console.log(sliceArr1,"sliceArr1") // [56, 12, 2]
console.log(arrD) // [1, 2, 7, 2, 6, 0, 3, 1, 5, 7, 8, 9, 45, 12, 34, 0]