javascript数组的一些方法

94 阅读2分钟

这是我参与8月更文挑战的第15天,活动详情查看:8月更文挑战

数组交集

    var arr1 = [{name:'name1',id:1},{name:'name2',id:2},{name:'name3',id:3}];
      var arr1Id = [1,2,3]
      var arr2 = [{name:'name1',id:1},{name:'name2',id:2},{name:'name3',id:3},{name:'name4',id:4},{name:'name5',id:5}];
      var result = arr2.filter(function(v){
            return arr1Id.indexOf(v.id)!==-1 // 利用filter方法来遍历是否有相同的元素
        })
      console.log(result);

数组并集

 let arr1 = [{name:'name1',id:1},{name:'name2',id:2},{name:'name3',id:3}];
      let arr2 = [{name:'name1',id:1},{name:'name4',id:4},{name:'name5',id:5}];
      let arr3 = arr1.concat(arr2);
      let result = [];
      var obj = [];
      result = arr3.reduce(function(prev, cur, index, arr) {
        console.log(prev, cur);
        obj[cur.id] ? '' : obj[cur.id] = true && prev.push(cur);
        return prev;
      }, []);
      console.log(result);

数组差集

let arr1 = [{name:'name1',id:1},{name:'name2',id:2},{name:'name3',id:3}];

let arr1Id = [1,2,3];

let arr2 = [{name:'name1',id:1},{name:'name4',id:4},{name:'name5',id:5}];

let arr2Id = [1,4,5];

let arr3 = arr1.concat(arr2);

let result = arr3.filter(function(v){

return arr1Id.indexOf(v.id)===-1 || (arr2Id.indexOf(v.id)===-1)

})`

console.log(result);

数组去重

4.去重    

let arr = [{name:'name1',id:1},{name:'name2',id:2},{name:'name3',id:3},{name:'name1',id:1},{name:'name4',id:4},{name:'name5',id:5}];
      var obj = [];
      let result = arr.reduce(function(prev, cur, index, arr) {
        console.log(prev, cur);
        obj[cur.id] ? '' : obj[cur.id] = true && prev.push(cur);
        return prev;
      }, []);

数组去重其他方法

方法一

let includeThis = false
            let vm = this
            if(vm.informedPersonList.length>0){
                vm.informedPersonList.forEach(el =>{
                    if(el.id == vm.selectedTrueItem.id){
                        includeThis = true
                    }
                })
            }
            if(includeThis===false){
                vm.informedPersonList.push(vm.selectedTrueItem)
            }else{
                Message({message: '请勿重复添加',type: 'warning'})
            }

方法二 利用ES6中的 Set 方法去重

let arr = [1,0,0,2,9,8,3,1];
          function unique(arr) {
                return Array.from(new Set(arr))
          }
          console.log(unique(arr));   // [1,0,2,9,8,3]  or6      console.log(...new Set(arr)); // [1,0,2,9,8,3]

二、使用双重for循环,再利用数组的splice方法去重(ES5常用)

var arr = [1, 5, 6, 0, 7, 3, 0, 5, 9,5,5];
function unique(arr) {
    for (var i = 0, len = arr.length; i < len; i++) {
        for (var j = i + 1, len = arr.length; j < len; j++) {
            if (arr[i] === arr[j]) {
                arr.splice(j, 1);
                j--;        // 每删除一个数j的值就减1
                len--;      // j值减小时len也要相应减1(减少循环次数,节省性能)   
                // console.log(j,len)

            }
        }
    }
    return arr;
}
console.log(unique(arr));       //  1, 5, 6, 0, 7, 3, 9