1.数组去重
1.1.常规的去重复方法,声明一个新的数组去接收数组中的值,判断在新数组中是否含有该值,如过没有就添加到新数组中
function duplicates(arr) {
var length = arr.length, newArr=[], repeatArr=[];
for(var i = 0; i < length; i++){
if (newArr.indexOf(arr[i]) > -1) {
if(repeatArr.indexOf(arr[i]) == -1){
repeatArr.push(arr[i]);
}
} else {
newArr.push(arr[i]);
}
}
return repeatArr.sort();
}
duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3]);
1.2.es6写法,匹配所有的第一次出现不等于最后一次出现的值,然后进行数组去重复并排序
function duplicates(arr) {
let arr1 = arr.filter((k, v) => {
return arr.indexOf(k) != arr.lastIndexOf(k)
})
return Array.from(new Set(arr1)).sort()
}
duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3]);
2.数组首字母大写
let name = 'aaa bbb ccc';
let uw=name.replace(/\b\w+\b/g, function(word){
return word.substring(0,1).toUpperCase()+word.substring(1);}
);
3.1~100求和
Array.from({length: 101}, (v, i) => i).reduce((a, b) => {return a + b})
console.log(arr)
4.输出数组的key和value的值
var a = ['a', 'b', 'c'];
var iterator = a.entries();
for (let [a, b] of iterator) {
console.log(a, b);
}
5.数组排序
const arr = [5155, 5394, 5603, 1004, 3934, 13858, 16237, 4151, 5950, 4803, 7433, 9333, 11455, 4156, 4379, 7972, 5818, 7896, 6535, 8341, 7115, 10589, 8494, 4361, 5453, 12064, 7166, 7541, 6583, 7564, 2683].sort((a, b) => {
return a - b
})
数组的最大值arr[arr.lenth - 1],数组中最小值为arr[0]
6.数组回调
const map = (arr, callback) => {
const result = []
for (let [i, j] of arr.entries()) {
result.push(callback(j, i))
}
return result
}
map([1, 2, 3, 4, 5], n => ++n) //[2,3,4,5,6]
7.数组扁平化
//es5实现
function flat(arr, num = 1) {
return num > 0
? arr.reduce(
(pre, cur) =>
pre.concat(Array.isArray(cur) ? flat(cur, num - 1) : cur),
[]
)
: arr.slice();
}
const arr = [1, 2, 3, 4, [5, 6, 7, [8, 9, 10, [11, 12, 13]]]]
flat(arr, Infinity);
//es6实现
arr.flat(Infinity);