数组---基本方法---去重数据(随笔最后)

1.向数组添加数据

// push()向数据末尾添加数据,并返回添加数据后的数组的长度
var arr = [1,2,3]
console.log(arr.push(4), arr)//4 [ 1, 2, 3, 4 ]
//unshift()向数据起始位置添加数据,并返回添加数据后的数组的长度 var arr = [1,2,3] console.log(arr.unshift(4), arr)//4 [ 4, 1, 2, 3 ]

 

2.删除数组元素

// pop()方法删除数组的最后一个元素,并返回删除的元素
var arr = [1,2,23,454]
console.log(arr.pop(), arr)//454 [ 1, 2, 23 ]
// shift()方法删除数组的第一个元素,并返回删除的元素 var arr = [23,434,54] console.log(arr.shift(), arr)//23 [ 434, 54 ]

 

3.截取数组

// slice()截取数组,截取的值不会在数组消失
//注意下标从0开始,截取的极值不包括开始(2),包括结尾(4)
var arr = [1,2,3,4,5,6]
console.log(arr.slice(2,4))//[ 3, 4 ]
// splice()截取数组,截取的值会在原数组消失,第一个参数值是哪位开始,第二个参数值是截取的长度 var arr = [1,2,3,4,5,6] console.log(arr.splice(2,4), arr)//[ 3, 4, 5, 6 ] [ 1, 2 ]

 

4.对数组的元素进行运算

let arr=[1,23,45]
console.log(arr.reduce((a,b)=>a+b))//69
console.log(arr.reduce((a,b)=>a*b))//1035

 

5.颠倒数组元素的排序

// reverse()会颠倒数组元素的顺序
let arr = [1,2,3]
console.log(arr.reverse())//[3,2,1]

 

6.合并数组

//concat()合并两个数组
var con1=[1,3,5,6]
var con2=[23,535,65]
console.log(con1.concat(con2))

 

7.ascii码排序

// sort()默认情况下sort方法是按ascii字母顺序排序的
let daoxu=[32,4,76,54,7]
console.log(daoxu.sort())//[ 76, 7, 54, 4, 32 ]

 

8.自然数排序

//封装数组排序函数
//包装有参函数,a,b;a-b正序,a+b倒序
function sortby(a,b){
return a+b;
}
let a=[1,4,5,3,2,8]
console.log(a.sort(sortby))//[ 8, 2, 3, 5, 4, 1 ]

 

9.检查元素是否存在数组内

// 数组的indexOf
let index=[1,24,56,7,8]
console.log(index.indexOf(56))//2所要检查元素在数组的位置
console.log(index.indexOf(10))//-1 所检查的元素如果不在数组范围里,则返回-1
//includes有此值,返回true,反之false==推荐 console.log(index.includes(1))

 

10.数组元素分割字符串

// join()方法,把数组的所有元素放入一个字符串,,也可以以自定义字符分割
let arr=[123,4,546]
console.log(typeof(arr.join()),arr.join())//string//123,4,546
console.log(arr.join("|"))//123|4|546

 

11.数组转换为字符串

//toString()把数组转换为字符串,并返回结果。
let arr = [12,334,543,43]
console.log(arr.toString(), typeof(arr.toString()))

 

12.检测对象是否为数组

// instanceof 用于判断一个变量是否某个对象的实例,
// obj(检测的对象) instanceof cons(构造函数) 
// instanceof 运算符用来检测 cons.prototype 是否存在于参数 obj 的原型链上。
let arr = [1,23,5,4]
console.log(arr instanceof Object)//true //Array也是Object的子类
console.log(arr instanceof Array)//true
// Array.isArray()方法用于判断一个对象是否为数组 console.log(Array.isArray([]))//true console.log(Array.isArray([1]))//true console.log(Array.isArray(true))//false

 

13.取数组最大值

Math.max.apply(null,[1,2,3,4,5,6])

 

14.已知一个值,拿在数组对应的下标

//lastIndexOf(),已知一个值,拿到在数组对应的下标
let arr = [23,24,2,53]
console.log(arr.lastIndexOf(2))

 

15.map

//map(),依次向函数中传入数组的数据,并把每次的返回结果组成一个新的数组,
//elem当前的数据,index,当前数据的下标,arr,数组本身。
let arr=[1, 2, 3].map(function(elem, index, arr) {
console.log(elem,index,arr)
//1 0 [ 1, 2, 3 ]
//2 1 [ 1, 2, 3 ]
//3 2 [ 1, 2, 3 ]
return elem * index;
});
console.log(arr)//[ 0, 2, 6 ]

 

16.filter

  a.去除数组内为false的元素

 let arr = [1,414,4,324,5,"",0,null,undefined,"r2r"]
 console.log(arr.filter(item => item)) //此方法可以去除数组内空字符串、null、undefined、0,

b.去除数组内重复的元素→不推荐,这应该是倒数第二慢的方法,倒数第一,大家都懂的

let arr = [1, 2, 2, 3, 4324, 43253, "a", "a", "c", 55,534,63];
console.log(arr.filter((item, index, self) => self.indexOf(item) ===index))

  c.去除数组内不符合条件的

let arr = [1,2,3,4,5,6,6,78,8]
console.log(arr.filter(item => item >10))//78

 17.数组去重

  a. 定义两个数组

let arr = Array.from(new Array(100000), (item, index) => {
    return index
})

let arr2 = Array.from(new Array(100000), (item, index) => {
    return index + index
})

  b. filter + indexOf      16706ms,双重for循环就不用说了


let start = new Date().getTime()
function dist(a, b){ let arr = a.concat(b) return arr.filter((item, index, self) => self.indexOf(item) === index) } dist(arr, arr2)
let end
= new Date().getTime() console.log(end-start)

  c. es6 → Set  22-28ms

let start = new Date().getTime()

function dist3(a, b){
    return Array.from(new Set([...a,...b]))
}
dist3(arr, arr2)

let end = new Date().getTime()
console.log(end-start)

  d. for + of   22-28ms

let arr3 = ['1', 1, '1', 2], result=[], obj = {}
let start = new Date().getTime()

function dist2(a, b){
    let arr = a.concat(b)
    //['1',1,'1'] '1' == 1
    for(let i  of arr){
        if(!obj[i]){
            result.push(i)
            obj[i] = 1
        }
    }
    console.log(result)
}
dist2(arr, arr2)

let end = new Date().getTime()
console.log(end-start)

 

posted @ 2018-08-31 09:49  时光凉忆  阅读(379)  评论(0编辑  收藏  举报