数组小技巧

前言

平常开发对数组的应用,浅记录一下

合并相同属性的对象生成新数组


var array= [{
        "id":"1",
        "name":"小明",
        "course":"语文"
    }, {
        "id":"2",
        "name":"小张",
        "course":"政治"
    }, {
        "id":"2",
        "name":"小张",
        "course":"政治"
    }]
/**
   * @method
   * @array 数组
   * @key 属性值
   */
  handleArr = (array, key) => {
    var obj = {}; var newArr = [];
    array.forEach((item) => {
      // 根据对象的属性是唯一的,将值作为对象的属性名
      if (!obj[item[key]]) {
        var arr = [];
        arr.push(item);
        newArr.push(arr);
        obj[item[key]] = item;
      } else {
        newArr.forEach((value) => {
          // 如果已经存在  就循环新组的值将值插入属性相同的数组里   为了防止重复添加   只要和第一个比较就可以了
          if (value[0][key] == item[key]) {
            value.push(item);
          }
        });
      }
    });
    return newArr;
  }
  const result = handleArr(array,'id')

纯前端过滤数组,通常表格筛选用到

var array= [{
        "id":"1",
        "name":"小明",
        "course":"语文"
    }, {
        "id":"2",
        "name":"小张",
        "course":"政治"
    }, {
        "id":"2",
        "name":"小张",
        "course":"政治"
    }]
    var filters={
    name:'小张'
}
/**
   * @method
   * @array 数组
   * @filters 筛选对象
   */
filterArr(array, filters) {
  const filterKeys = Object.keys(filters);

  return array.filter((item) => 

    filterKeys.every((key) => {

      if (!filters[key].length) { return true; }

      return !!~item[key].indexOf(filters[key]);
    }));
}
  const result = handleArr(array,filters)

根据对象属性求和

var array= [{
        "id":"1",
        "name":"小明",
        "course":13
    }, {
        "id":"2",
        "name":"小张",
        "course":12
    }, {
        "id":"2",
        "name":"小张",
        "course":11
    }]
/**
   * @method
   * @array 数组
   * @key 属性值
   */
reduceArr(array, key) {
var sum = result.reduce(function(prev, cur) {
    return cur[key] + prev;
}, 0);
}
var sum = reduceArr(array,'course')
···
##判断数组元素是否一致

```javascript
isAllEqual(array) {

      if (array.length > 0) {

        return !array.some(function(value, index) {

          return value !== array[0]

        })

      } else {

        return true

      }

    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值