关于Set对象(ES6)

  今天初次接触ES6,发现确实挺神奇的,许多用以前方法去实现需要一大串代码的,用ES6竟然几句就搞定了。

  这里我要说的是Set对象。Set对象是ES6中新增的类型,可以自动排除重复项,生成Set对象后,可以轻松遍历它所包含的内容

  例如,遍历字符串。

var str = new Set("Hello world!");
for(var str1 of str){
  console.log(str1+" ")  
}
结果会是这样:H e l o w r d !

  为什么会是这样,因为Set对象会自动排除重复项。

  到了这里,我们可以很容易的想到使用Set对象进行数组去重,没错,通过该方法确实是挺方便的。 

var arr = [12,23,45,34,56,56,87,23,45,12,89];
var arr1 = new Set(arr);
var arr2 = [];
for(var arr3 of arr1){
    arr2.push(arr3)
}
console.log(arr2)

 

  另一种数组去重法:

function foo(arr){
    return Array.from(new Set(arr))  // Array.from方法可以将 Set 结构转为数组
}
const items = [1,2,3,4,5,6,7,1,2,1,3,1,2,3]
console.log(foo(items))

  Set函数接受数组作为参数,再使用Array.from将其转换为数组,从而达到去重的目的

 

  还有一种更简洁的;

let arr1 = [12,13,23,45,46,48,78,79,45,12,13,23];
let arr = new Set(arr1)
console.log([...arr])  // [ 12, 13, 23, 45, 46, 48, 78, 79 ]

  

  (1)、数组去重方法封装:

function arr(list) {
  let arr = []
  let obj = {}
  list.forEach(item => {
    if (!obj[item]) {
      arr.push(item)
      obj[item] = true
    }
  })
  return arr
}

  使用:

  let list = [1,2,12,45,23,456,12,4,2,1]

  arr(list)

 

  (2)、将数组中对象相同的key值合并到新数组中。 

var list = [
  {
    groupName: '兴趣爱好',
    hobby: 'movie'
  }, {
    groupName: '名字',
    name: '张三'
  }, {
    groupName: '性别',
    sex: '男'
  }, {
    groupName: '兴趣爱好',
    hobby: 'reading'
  }, {
    groupName: '名字',
    name: '李四'
  }, {
    groupName: '性别',
    sex: '女'
  }
]
let obj = {}
list.forEach((item, index) => {
  let {groupName} = item
  if (!obj[groupName]) {
    obj[groupName] = {
      groupName,
      data: []
    }
  }
  obj[groupName].data.push(item)
})
let newList = Object.values(obj)   // 返回一个给定对象的所有可枚举属性组成的数组
console.log(newList)

  

  (3)、根据对象的某个属性去排序数组

var arr=[
  { 
    name:"wlz", 
    age:25
  },{ 
    name:"wlz", 
    age:5
  },{ 
    name:"wlz", 
    age:15
  },{ 
    name:"wlz", 
    age:3
  },{ 
    name:"zlw", 
    age:24
  }
]
// prop表示需要排序的属性,isShengxu为true表示升序,否则表示降序
function compare(prop, isShengxu) {
  return function (a, b) {
    if (isShengxu) {
      return a[prop] - b[prop]
    } else {
      return b[prop] - a[prop]
    }
  }
}
arr.sort(compare('age', false))

  

posted @ 2017-11-10 21:48  江峰★  阅读(3307)  评论(0编辑  收藏  举报