数组操作

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);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值