数组操作

291 阅读1分钟
  • 2022/02/07 更新数组值的比较
  • 2020/02/12 init

数组去重

普通数组

let a1 = [1, 2, 3, 4, 5]
let a2 = [5, 6, 7, 8, 9, 1]

filter()

let a3 = a1.concat(a2).filter((value,index,self) => {
    return self.indexOf(value) === index;
})

利用set()

let a4 = Array.from(new Set(a1.concat(a2)))

对象数组

let arr = [
    {name: 'aaa', data: 20}, 
    {name: 'bbb', data: 10}, 
    {name: 'aaa', data: 20}, 
    {name: 'ccc', data: 2},
    {name: 'ddd', data: 31},
    {name: 'eee', data: 1}
]

利用reduce()

let obj = {};
arr = arr.reduce(function (item, next) {
    //   console.log(JSON.stringify(item))
    //   console.log(next)
    /*
    *   第1次   item: [] , next {name: 'aaa'}
    *   第2次   item: [{name: 'aaa'}] , next {name: 'bbb'}
    * */
    obj[next.name] ? '' : obj[next.name] = true && item.push(next);
    return item;
}, []);

数组平均数

reduce

汇总操作

let arr = [12, 34, 56, 78, 90]
let avarge = arr.reduce((temp, item, index) => {
    /*
    * console.log(temp, item, index)
    * 12 34 1
    * undefined 56 2
    * undefined 78 3
    * undefined 90 4
    * */
    if(index<arr.length-1){
        // 求和,返回给下一次
        return temp+item
    }else{
        // 最后一次
        return (temp+item)/arr.length
    }
})

值的比较

判断是否NaN

通常使用 === 操作符,但NaN无法进行比较

let values = [1,NaN,2];

console.log(values.indexOf(NaN))     // -1
console.log(values.includes(NaN))    // true

🌟 还可以通过 Object.is

let a = NaN
console.log(Object.is(a,NaN))    // true

判断 +0 -0

let a = -0;  let b = +0
console.log( a===b )             // true

let values = [1,+0,2]
console.log(values.indexOf(-0))     // 1
console.log(values.includes(-0))    // true

🌟 只能通过 Object.is 区分+0 -0

let a = -0;  let b = +0
console.log( Object.is(a,b) )       // false



【多多登场】

略略略