JS数组转换

本文介绍了JavaScript中针对数组对象的几种分组方法,包括根据key值分组为数组对象、返回对象数组、二维数组以及两种不同的数组转对象策略,通过示例展示了如何使用这些函数对数据进行分组操作。
摘要由CSDN通过智能技术生成

一、js数组对象根据key进行分组,返回值为数组

    function groupBy(array, key) {
      return array.reduce((result, currentItem) => {
        // 使用 key 函数获取分组的键
        const groupKey = key(currentItem);
        // 检查结果对象中是否已经有了这个键
        const existingGroup = result.find(item => item.key === groupKey);
        if (existingGroup) {
          // 如果已存在,则将当前项添加到该组数组中
          existingGroup.items.push(currentItem);
        } else {
          // 如果不存在,则创建新组并添加当前项
          result.push({ key: groupKey, items: [currentItem] });
        }
        return result;
      }, []);
    }

    // 示例使用
    const items = [
      { category: 'fruits', name: 'apple' },
      { category: 'animals', name: 'dog' },
      { category: 'fruits', name: 'banana' },
      { category: 'animals', name: 'cat' }
    ];

    const groupedItems = groupBy(items, item=>item.category);
    console.log(groupedItems);  
    // 返回结果 数组对象
    //     [{
    //       "key": "fruits",
    //       "items": [
    //         {
    //           "category": "fruits",
    //           "name": "apple"
    //         },
    //         {
    //           "category": "fruits",
    //           "name": "banana"
    //         }
    //       ]
    //     },
    //       {
    //         "key": "animals",
    //         "items": [
    //           {
    //             "category": "animals",
    //             "name": "dog"
    //           },
    //           {
    //             "category": "animals",
    //             "name": "cat"
    //           }
    //         ]
    //       }
    //     ]

二、js数组对象根据key进行分组,返回值为对象


function groupBy(array, key) {
  return array.reduce((result, currentItem) => {
    // 使用 key 的值作为分组的键
    const groupKey = currentItem[key];
    
    // 如果 result 中不存在这个键,则创建一个数组
    if (!result[groupKey]) {
      result[groupKey] = [];
    }
    
    // 将当前项推入对应的分组数组中
    result[groupKey].push(currentItem);
    
    return result;
  }, {});
}
 
// 示例使用
const items = [
  { category: 'fruits', name: 'apple' },
  { category: 'animals', name: 'dog' },
  { category: 'fruits', name: 'banana' },
  { category: 'animals', name: 'cat' }
];
 
const groupedItems = groupBy(items, 'category');
console.log(groupedItems);

三、js数组对象进行分组,返回值为二维数组

function groupBy(array) {
  let obj={},newArr=[];
  array.forEach(function(item){
    //根据对象的属性是唯一的,将值作为对象的属性名
    if(!obj[item.groupName]){
      let arr=[];
      arr.push(item);
      newArr.push(arr);
      obj[item.groupName]=item;
    }else{
      newArr.forEach(function(value,index){
        //如果已经存在 就循环新组的值将值插入属性相同的数组里 为了防止重复添加 只要和第一个比较就可以了
        if(value[0].groupName==item.groupName){
          value.push(item)
        }
      })
    }
  })
  return newArr
}
const array = [
  { groupName: '食物', name: 'apple' },
  { groupName: '动物', name: 'dog' },
  { groupName: '食物', name: 'banana' },
  { groupName: '动物', name: 'cat' }
];
const groupedItems  = groupBy(array)
console.log(groupedItems)

四、js数组对象转对象,影响排序和不影响排序的两种方法

function groupBy(array) {
  const Obj = {}
  array.forEach((item) => {
    Obj[item.groupName] = { text: item.groupName, args: item.name }
  })
  return Obj
}
function groupByTwo(array) {
  const map = new Map()
  array.forEach((item) => {
    map.set(item.groupName, { text: item.groupName, args: item.name })
  })
  return map
}

const array = [
  { groupName: '', name: 'apple' },
  { groupName: '1', name: 'dog' },
  { groupName: '2', name: 'banana' },
  { groupName: '3', name: 'cat' }
];
const groupedItems  = groupByTwo(array)
const groupByI = this.groupBy(array)

console.log(groupedItems, groupByI )

五、js数组对象返回带key对象或者返回二维数组

function groupBy(array,fn) {
  const groups = {};
  array.forEach(function (o) {
    const group = JSON.stringify(fn(o));
    groups[group] = groups[group] || [];
    groups[group].push(o);
  });
  // 返回二维数组
  // return Object.keys(groups).map(function (group) {
  //     return groups[group];
  // });
  //返回对象数组
  return groups;
}

const array = [
  { groupName: 'fruits', name: 'apple' },
  { groupName: 'animals', name: 'dog' },
  { groupName: 'fruits', name: 'banana' },
  { groupName: 'animals', name: 'cat' }
];
const groupedItems = groupBy(array,  (link) => {
  return link.groupName
})
console.log('groupedItem', groupedItems)

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值