数组遍历map、forEach、filter、some、every、reduce

360 阅读1分钟
对象keys和values提取出来做数组
var obj = {a:1,b:2,c:3}
console.log(Object.keys(obj)) //[a,b,c]
console.log(Object.values(obj)) //[1,2,3]
除了reduce,其他都是三个参数(item,index,数组本身arr)
forEach返回undefined
1、没有返回值
this.newArr = this.arr.forEach((item,index)=>{
        item.show = false;
        return item;
})
console.log(this.newArr) //undefined
map返回一个数组,不会修改原数组
var arr = [1,2,3,4,5]
var arr1 = arr.map((item,index,arr)){
    return item*2;
}
console.log(arr)  //[1,2,3,4,5]
console.log(arr1) //[2,4,6,8,10]
filter过滤数组,不会修改原数组
将数组的相同的值合并起来
let arr = [{id: '1a'},{id: '2d'},{id: '3asd'},{id: '1a'},{id: '2d'},{id: '2d'},{id: '12s'}] 
unquire(arr , key) {
          let concatArr = []
          arr.sort((a, b) => {
              var x = a[key].toLowerCase();
              var y = b[key].toLowerCase();
              if (x < y) return -1
              if (x > y) return 1;
              return 0;
          });  //排序
          for (let i = 0; i < arr.length; i++) {
              if (arr[0][key] === arr[arr.length - 1][key]) { //如果第一项等于最后一项 , 代表整个数组都相同
                  concatArr.push(arr)
                  break;
              } else if (arr[0][key] !== arr[i][key]) { //获取与第一项不同的元素的下标
                  concatArr.push(arr.splice(0, i)) //将数组截取
                  concatArr.push(...this.unquire(arr,key)) //截取后的数组进行递归 , 由于上一步用的为push , 所以返回的为复杂数组[[]] , 所以需要使用展开运算符进行扁平化
                  break;
              }
          }
          return concatArr
      }
this.unquire(arr,id);