在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]