数组常见的方法(数组常用的操作方法)
找元素:
- arr.indexOf() 找到返回索引,找不到返回-1
- arr.includes(item,2) 从索引为2开始找,返回true 或者false 可以用于去重
增删改查
- arr.push() 末尾增加
- arr.unshift() 开头增加
- arr.pop() 末尾删除
- arr.shift() 开头删除
删除新增
arr.splice(n,m,num) 从下标为n的开始(包括n) 删除m个,把num增加到删除的n下标的前面(非常强大)
填充:
value:填充值。
start:填充起始位置,可以省略。
end:填充结束位置,可以省略,实际结束位置是end-1。
arr.fill(value, start, end)
const arr3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
arr3.fill(7, 2, 5)
console.log('%s', arr3)
1,2,7,7,7,6,7,8,9,10,11
排序
- arr.sort(function(a,b){return a-b}) || arr.sort(function(a,b){return a.age-b.age})
- arr.sort(function() { return Math.random() – 0.5 }) 随机排列
- arr.reverse()反向排序
交换两个数
let a = 5;
let b = 8;
[a,b] = [b,a]
数据拼接
- arr.concat(arr1) 不改变原数组
- [1,2,…rest]
截取:
- arr.slice(n,m) 截取,包括n但不包括m
- arr.slice(1,-1)允许负数 不改变原数组,-1为倒数第一个,-2 为倒数第二个
字符串和数组之间转换
- arr.join(\’\’) 将数组装换成字符串,并将\’\’里的分隔每一项
- str.split(“”) 将字符串分割为数组
- arr.toString()装换为字符串
- arr.toLocaleString() 装换为本地数组
总结:
- num.toFixed(2) 保留两位小数
- 交换两个数的值[x,y]=[y,x]
- filter()、concat() 和 slice()。它们不会变更原始数组,而总是返回一个新数组
- 返回值:增加返回新增后的长度,删除返回删除的项,splice返回删除的数组,slice返回截取的数组
数组降维 /拍平
- arr.flat() 数组降维 默认传1 ,将一个维度 ,传入 Infinity ,表示降维 一维数组,不改变原数组
function flattening(arr,num){
if(!Array.isArray(arr)) return arr
return arr.flat(num);
}
- flatMap
//flatMap()允许在对数组进行降维之前,先进行一轮映射,用法和map()一样。然后再将映射的结果降低一个维度。可以说arr.flatMap(fn)等效于arr.map(fn).flat(1)。但是根据MDN的说法,flatMap()在效率上略胜一筹,谁知道呢。
//flatMap()也可以等效为reduce()和concat()的组合,下面这个案例来自MDN,但是这不是一个map就能搞定的事么?
var arr1 = [1, 2, 3, 4];
arr1.flatMap(x => [x * 2]);
// 等价于
arr1.reduce((acc, x) => acc.concat([x * 2]), []);
// [2, 4, 6, 8]
- arr.tostring().split(\’,’)
- 利用 reduce 进行迭代,核心的思想是递归实现
function flattening(arr,num){
if(!Array.isArray(arr)) return arr
return arr.reduce((a,b)=>a.concat(Array.isArray(b)?flattening(b):b),[])
}
构造数组
- apply
Array.apply(null, { length: 10 }) Array.apply(null,[1,2,3,4])
值为 undefined
map(()=>100) 填充
2.Array()
Array(10)
- empty * 10 站位
- 不能被map 填充 可以 用 fill
- Array(10).fill({})
3.Array.from
- Array.from({length:100}, (v,k) => k);
推荐这个:生成数组 ,第二个参数函数 进行遍历
伪数组/数组 之间的转化
- Array.prototype.slice.call(arguments);
- [ ].slice.call(arguments,0)
- Array.from(arguments)
判断数组
5.判断数组的方法:
使用instaceof和construcor,被判断的array必须是在当前页面声明的!
- a instanceof Array
- a.constructor == Array a的构造函数是Array
- Array.isArray(a) 推荐
清空数组
- arr.length = 0
- arr.splice(0)
- arr = []
过滤数组中的空值
- arr.filter(Boolean) 删除arr 里为false的项 null,undefined,false,0,\’\’,NaN , 不改变原数组
排序+去重
冒泡排序
//1. 冒泡排序,一次选一个最大的放在后面,arr.length次,每次少比较一个
function mpSortFun(arr){
for ( var i = 0 ; i < arr.length ; i++ ){
//一遍就选一个最大的放在最后,要arr.length遍才能把这个数组排序好.
for ( var j = 0 ; j < arr.length - 1 - i ; j++ ){
//小循环,和其他元素进行比较,把最大的放在最后面,其余的我不管.
//交换位置 arr[j] arr[j+1]
var temp ;
if ( arr[j] > arr[j+1] ){
temp = arr[j] ;
arr[j] = arr[j+1] ;
arr[j+1] = temp ;
}
}
}
return arr ;
}
快速排序
// 2. 快速排序 一次一轮 两两交换
function quickSortFun(arr){
for( var i = 0 ; i < arr.length ; i++ ){//数组中的每一个数
var min = arr[i] ; //假设最小的值
var minIndex = i ; //最小值所在的索引
for ( var j = i + 1 ; j < arr.length ; j++ ){//当前项依次于其他项进行比较
if ( min > arr[j]){ //如果不是最小的
min = arr[j] ; //把更小的值和索引交给假定的最小的值和索引
minIndex = j ;
}
}
//通过中间变量互换值
arr[minIndex] = arr[i] ; //循环结束以后,把最小的值和假设最小的值交换
arr[i] = min ;
}
return arr ;
}
复合排序
var arr = ["sp12","su18","au13","wi14"]
for(var i = 0 ; i < arr.length;i++){
for(var j = 0 ; j < arr.length-i-1;j++){
if(parseInt( arr[j].substr(2,2) ) > parseInt( arr[j+1].substr(2,2) ) ){
var temp = arr[j];
arr[j]=arr[j+1];
arr[j+1] = temp
}
}
}
原生排序
arr.sort(function(a,b){return a.age-b.age}})
filter去重
let newarr = arr.filter((item,index)=>!arr.includes(item,index+1))
array.filter((item,idx,arr) => arr.indexOf(item) === idx);
set 去重
Array.from(new Set(arr))
const nonUnique = [...new Set(array)];
相邻去重
var str = 'abccdedeefghiiiabbbbnnnsssfgg'; || 数组
function QC(data){
let arr
Array.isArray(data)?arr = data:arr = data.split('')
for(var i = 0 ; i < arr.length;i++){
if(arr[i] == arr[i+1]){
arr.splice(i+1,1)
i = i-1
}
}
return arr.join('')
}
onsole.log(QC(str))
单行的回文数检查
function checkPalindrome(str) {
return str == str.split('').reverse().join('');
}
checkPalindrome('naman');
// 输出: true
声明:如若本站内容侵犯了原著者的合法权益,请提供凭证,可联系我们进行处理,详见<免责声明>