常见的数组操作(去重、排序、求和……)

一、数组去重和排序

1. 原生JavaScript
Array.prototype.unique = function(){
    var arr = [], obj = {};
    for(var i = 0; i < this.length; i++){
        if(!obj[this[i]]){
            arr.push(this[i]);
            obj[this[i]] = true;
        }
    }
    return arr;
}
var arr1 = [2, 3, 2, 'hi', 'hi'];
console.log(arr1.unique()); //[2, 3, 'hi']

[2, 4, 1, 3].sort((a,b) => a-b); //[1, 2, 3, 4]

//or
[1,2,3,1,'a',1,'a'].filter(function(v, i, arr){
    return i === arr.indexOf(v);
});
2. Lodash ( v4.4.0 )
_.uniq([2, 3, 2, 'hi', 'hi']); //[2, 3, 'hi']
_.sortBy([2, 4, 1, 3, 3]);     //[1, 2, 3, 3, 4]

//排序并去重
_.uniq(_.sortBy([2, 4, 1, 3, 3])); //[1, 2, 3, 4]
3. 使用set对象

[...new Set(array)]


二、数组求和(可接收任意多个参数)

1. 使用for…of 循环
function addUp() {
  let total = 0;
  for(let num of arguments) {
    total += num;
  }
  return total;
}

addUp(1, 2, 3, 4);  // 10
2. 使用Array.from & reduce
function addUp() {
  const nums = Array.from(arguments);
  return nums.reduce((prev, next) => prev + next, 0)
}

addUp(1, 2, 3, 4);  // 10

三、求数组最大元素

// ES5的写法
Math.max.apply(null, [14, 3, 77])

// ES6的写法
Math.max(...[14, 3, 77])

// 等同于
Math.max(14, 3, 77)

四、将一个数组添加到另一个数组的尾部

// ES5的写法
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
Array.prototype.push.apply(arr1, arr2);

// ES6的写法
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
arr1.push(...arr2);

// or
var arr3 = [...arr1, ...arr2]

五、类数组转数组

<div class="people">
  <p>Jayp>
  <p>Easonp>
  <p>Davidp>
div>
const people  = Array.from(document.querySelectAll('.people p'));
const names = people.map(person => person.textContent);
console.log(names);  // ['Jay', 'Eason', 'David']

你可能感兴趣的:(javascript)