Js多条件分组

单条件

function dataGroupingToArray(array, key, resKey = "list") {
	if (!key) return array;
    var aMap = [];
    var aResult = [];
    for (var i = 0; i < array.length; i++) {
        var item = array[i];
        if (aMap.indexOf(item[key]) === -1) {
            var oItem = {};
            oItem[resKey] = [item];
            oItem[key] = item[key];
            aResult.push(oItem);
            aMap.push(item[key]);
        } else {
            var index = aMap.indexOf(item[key]);
            aResult[index][resKey].push(item);
        }
    }
    return aResult;
}


//调用
this.dataGroupingToArray(this.list,'bloodBreedId')

多条件 

    dataGroupingToArray(array, keyArry, resKey = 'list') {
      if (keyArry.length <= 0) return array
      var aMap = []
      var aResult = []
      for (var i = 0; i < array.length; i++) {
        var item = array[i]
        var repetitionValue = ''
        var repetitionKey = ''
        keyArry.forEach((keyValue) => {
          repetitionKey = repetitionKey + keyValue
          repetitionValue += '' + item[keyValue]
        })
        if (aMap.indexOf(repetitionValue) === -1) {
          //没有重复
          var oItem = {}
          oItem[resKey] = [item]

          oItem[repetitionKey] = repetitionValue //item[key] //分组的字段
          aResult.push(oItem)
          aMap.push(repetitionValue)
        } else {
          //重复了
          var index = aMap.indexOf(repetitionValue)
          aResult[index][resKey].push(item)
        }
      }
      return aResult
    },

//调用
this.dataGroupingToArray(this.list, ['bloodBreedId', 'bloodType'])

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想要使用 `reduce` 方法来进行数组分组,可以使用累加器函数来构建一个包含分组的对象。下面是一个示例代码: ```javascript function groupArrayByCondition(arr, condition) { return arr.reduce((groupedArray, element) => { const key = condition(element); if (!groupedArray[key]) { groupedArray[key] = []; } groupedArray[key].push(element); return groupedArray; }, {}); } // 示例用法 const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; const evenOddGroups = groupArrayByCondition(numbers, (num) => { return num % 2 === 0 ? 'even' : 'odd'; }); console.log(evenOddGroups); ``` 在这个示例中,我们定义了一个名为 `groupArrayByCondition` 的函数,它接受两个参数:要分组的数组 `arr` 和一个用于判断分组条件的函数 `condition`。我们使用 `reduce` 方法对数组进行迭代,并在累加器函数中构建包含分组的对象 `groupedArray`。 在累加器函数中,我们使用 `condition` 函数来获得元素的分组条件,并将元素添加到相应的分组中。如果分组不存在,则在 `groupedArray` 中创建一个新的空数组用于该分组。 最后,我们返回构建好的 `groupedArray` 对象作为 `reduce` 方法的最终结果。 在示例用法中,我们创建了一个包含数字的数组 `numbers`。然后,我们使用 `groupArrayByCondition` 函数将数字根据奇偶性进行分组,并将结果存储在 `evenOddGroups` 变量中。最后,我们输出 `evenOddGroups`,看看分组的结果。 希望这个示例对你有帮助!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值