常用的Array方法(持续更新)

在js中数组的方法有很多,作为一个新手自己整理了我们常用到的一些方法

数组去重

Array.from(new Set(arr))

转化字符串

var a = [1,2,3,4]
console.log(a.join()); // "1,2,3,4"
console.log(a.join(""); // "1234"
console.log(a.join(" ")); // "1 2 3 4"
console.log(a.join("-")); // "1-2-3-4"

数组求和

  • 方法一
function sum(arr) {
    var s = 0;
    arr.forEach(function(val, idx, arr) {s += val;}, 0);
    return s;
};
  • 方法二

利用数字专字符串,和eval(执行代码)实现数组求和

function sum(arr) {
    return eval(arr.join("+"));
};

数组排序

按照字母排序

var a = ['aa', 'dd', 'bb', 'cc']
console.log(a.sort()); // ["aa", "bb", "cc", "dd"]

给数字排序要用到回调函数

var a = [20,10,5,2,3,4]
console.log(a.sort()); // [10,2,20,3,4,5]  ???? 没有进行排序???
a.sort((a,b)=>{
  return a-b
})                     // [2,3,4,5,10,20]

高级一点的 按照数组里面对象的属性对数组排序

let arr = [
           {
               "Name": "高处作业",
               "Num": 47
           }, {
               "Name": "文明施工",
               "Num": 68
           }, {
               "Name": "扣件式钢管脚手架",
               "Num": 38
           }, {
               "Name": "施工用电",
               "Num": 64
           }, {
               "Name": "安全管理",
               "Num": 29
           }
       ]
       function fn(key){
           return function(value1,value2){
               return value1[key]-value2[key]
           }
       }
       let arr1 = arr.sort(fn("Num"))
       console.log(arr1);

数组乱序

function shuffle(items) {
   return [...items].sort((a, b) => Math.random() > 0.5 ? -1 : 1);
}
console.log(shuffle([1,2,3,4,5,6]));

function shuffle(items) {
   items = [...items];
   const ret = [];
   while (items.length) {
       const idx = Math.floor(Math.random() * items.length);
       const item = items.splice(idx, 1)[0];
       ret.push(item);
   }
   return ret;
}

合并数组

普通合并

var a = ['a','b']
console.log(a.concat([3,4,5])) // ["a", "b", 3, 4, 5]
console.log(a)      // ['a','b']

es6数组合并

var a = ["a","b"];
var b = ["c","d"];
var c = [...a,...b]
console.log(c)

数组添加元素

数组前面添加元素

var a = ['a','b']
console.log(a.unshift("c")) // 3 返回添加元素后数组长度
console.log(a) // ['c','a','b']

数组后面添加元素

var a = ['a','b']
console.log(a.push('c')) // 3 返回数组长度
console.log(a) // ['a','b','c']

数组删除元素

删除数组前面元素

var a = ['a','b','c']
console.log(a.shift()) // 'a' 返回删除第一项元素
console.log(a) // ['b','c']

删除数组后面元素

var a = ['a','b','c']
console.log(a.pop()) // 'c' 返回末尾删除的元素
console.log(a) // ['a','b']

数组截取

**
1个参数表示的时数组的当前位置开始一直到数组末尾的所有项
**

**
2个参数则表示从起始位置至结束位置之间的所有项,但不包含结束位置项
**

var a = [1,3,5,7,9]
console.log(a.slice(2)) // [5,7,9] 从下标2开始一直截取到最后
console.log(a) // [1,3,5,7,9]
console.log(a.slice(2,4)) [5,7] // 从下标2开始截取到下标4的元素,不包含下标为4的值
console.log(a.slice()) // [1,3,5,7,9]
console.log(a.slice(1,-2)) // [3,5] 终止下标为负数,出现负数时,将负数加上数组长度的值来替换该位置的数(1,3)
console.log(a.slice(-4,-1)) // [3,5,7] 两个值都为负数时,都加上数组长度值(1,4)

万能的添加删除

2个参数时,可以作删除操作,分别表示要删除数组第一个元素的位置和项数

3个参数,可以作替换操作,分别表示起始位置、删除的项数、插入的项

var a = [1,3,5,7,9]
console.log(a.splice(1,3)) // [3,5,7]
console.log(a) // [1,9]
var a = [1,3,5,7,9]
console.log(a.splice(1,0,2,3)) // [1,2,3,3,5,7,9]
var a = [1,3,5,7,9]
console.log(a.splice(1,2,2,3) // [1,2,3,7,9]

数组反转

将数组中的元素倒叙排序,返回逆序的数据

var a = ['a','b','c','d']
console.log(a.reverse()); // ["d", "c", "b", "a"]

在数组中查找元素

indexOf(): 从数组的首位向后找,返回元素下标

lastIndexOf(): 从数组末尾向前找,返回元素下标

var a = [1,3,5,7,9]
console.log(a.indexOf(9)) // 4
console.log(a.lastIndexOf(9)) // 4
var a = [1,3,3,5,7,7,9]
console.log(a.indexOf(3)) // 1 默认从前向后找
console.log(a.lastIndexOf(3)) // 2 默认从后向前找

数组循环遍历

var arr = [1,3,5,7,9];
arr.forEach(function(item, index, arr){
console.log(item + '-' + index + '-' + (arr === arr));
});

数组映射

var arr = [1,3,5,7,9];
var arr2 = arr.map(function(item){
return item*2
});
console.log(arr2) // [2,6,10,14,18]

查找满条件的值

对数组中的每一项运行给定函数,返回满足条件的元素组成的数组

var arr = [1,3,5,7,9];
var arr2 = arr.filter(function(item,index){
return item > 3
});
console.log(arr2) // [5,7,9]

填充数组

Array(20).fill(item)
// 20代表数组中元素的个数,item代表每个数组的值

深拷贝

let obj = {
    id:1,
    info:{
        name:"hello",
        age:24
    }
}
let obj2 = JSON.parse(JSON.stringify(obj))
obj2.id = 3;
obj2.info.name = "刘亦菲";
console.log(obj.id);   // 1
console.log(obj.info.name);   // hello

生成指定长度的数组(1-100)

 Array.from({length: 100}, (v, i) => i+1);

数组扁平化

let arr2 = [1, 2, 3, [4, [5, 6]]];
  console.log(arr2.flat());// [1, 2, 3, 4, [5, 6]]
  console.log(arr2.flat(2));// [1, 2, 3, 4, 5, 6]
  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值