一、数组排序
方式一:
var arr =[18,10,99,87,100,3,2,5,1];
arr.sort(function(a,b){
return a-b
})
方式二:
arr.sort(function(a,b){
if(a>b){return 1}
else{ return -1}
})
二、数组去重
方式一:
var arr=[1,3,5,7,1,3,20,28];
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)
}
}
}
方式二:
function uniq(array){
var temp = [];
for(var i = 0; i < array.length; i++) {
//如果当前数组的第i项在当前数组中第一次出现的位置是i,才存入数组;否则代表是重复的
if(temp.indexOf(array[i]) == -1){
temp.push(array[i])
}
}
return temp;
}
var aaaaa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aaaaa))
var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));
方式三:ES6去重
var arr=new Set([12,2,3,4,3,5,12])
alert(arr)
三、数组合并,去重,排序
let arr1 = [1, 1, 2, 3, 6, 9, 5, 5, 4]
let arr2 = [1, 2, 5, 4, 9, 7, 7, 8, 8]
function uniqueArr(arr1,arr2) {
//合并两个数组
arr1.push(...arr2)//或者arr1 = [...arr1,...arr2]
//去重
let arr3 = Array.from(new Set(arr1))//let arr3 = [...new Set(arr1)]
//数组排序
arr3.sort(function(a,b){
return a - b;
})
console.log(arr3)
}
uniqueArr(arr1,arr2)
四、数组切割多个数组
//arr是要被切割的数组 len参数是要分割的内数组的长度
split_array=(arr,len)=>{
let arr_length = arr.length;
let newArr = [];
for(let i=0;i<arr_length;i+=len){
newArr.push(arr.slice(i,i+len));
}
return newArr;
}
let data = ['赵','钱','孙','李','周','吴'];
let result = split_array(data, 3);
五、数组的添加及删除
shift() //方法:移除数组中的第一项并返回该项
push() //方法:从数组末端添加项
若是想实现相反的操作的话,可以使用
unshift() //方法:在数组的前端添加项
pop() //方法:从数组末端移除项
六、数组求和
function sum(arr) {
return arr.reduce(function(x, y) {
return x + y;
});
}
sum([1, 2, 3, 4, 5]); // 15
七、数组多个对象去重
arr1=[
{
"xingming":"陈震",
"danweimingcheng":null,
"xingbie":"男",
"jiguan":"",
"minzu":"",
"shengao":"",
"sfz":""
},
{
"xingming":"陈水泉",
"danweimingcheng":null,
"xingbie":"男",
"jiguan":"",
"minzu":"",
"shengao":"",
"sfz":""
},
]
arr2=[
{
"xingming":"陈水泉",
"danweimingcheng":null,
"xingbie":"男",
"jiguan":"",
"minzu":"",
"shengao":"",
"sfz":""
},
{
"xingming":"侍艳",
"danweimingcheng":null,
"xingbie":"女",
"jiguan":"",
"minzu":"",
"shengao":"",
}
];
arr1.push(...arr2)//或者arr1 = [...arr1,...arr2]
console.log(arr1)
let hash={};
arr1 = arr1.reduceRight((item, next) => {
hash[next.xingming] ? '' : hash[next.xingming] = true && item.push(next);
return item
}, []);
console.log(arr1)
unique(arr) {
const res = new Map();
return arr.filter((arr) => !res.has(arr.xm) && res.set(arr.xm, 1));
}
八、es6之数组的flat(),flatMap()
数组的成员有时还是数组,Array.prototype.flat()用于将嵌套的数组“拉平”,变成一维数组。该方法返回一个新数组,对原数据没有影响。
[1, 2, [3, 4]].flat()
// [1, 2, 3, 4]
flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1
[1, 2, [3, [4, 5]]].flat()
// [1, 2, 3, [4, 5]]
[1, 2, [3, [4, 5]]].flat(2)
// [1, 2, 3, 4, 5]
上面代码中,flat()的参数为2,表示要拉平两层的嵌套数组。
如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。
[1, [2, [3]]].flat(Infinity)
// [1, 2, 3]
如果原数组有空位,flat()方法会跳过空位。
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]
flatMap()只能展开一层数组。