js处理数组,使键值变成一个新的二维数组

需求:all=[{aa:'123',bb:'456',cc:'789',dd:'abc'},{aa:'b123',bb:'b456',cc:'b789',dd:'babc'},{aa:'c123',bb:'c456',cc:'c789',dd:'cabc'},{aa:'d123',bb:'d456',cc:'d789',dd:'dabc'}] 请将all这个数组使用js进行处理,取all数组的第0条数据中的key,放到一个数组header里面。再将all这个数组里面的每一条对象的的值取出来放到另一个新数组里面,记住,没一条对象的值都要放到一个新数组里面,这意味着会有多个新数组。之后将header和其它的新数组按照顺序方法另一个数组里面,变成一个二维数组

var all = [
  { aa: '123', bb: '456', cc: '789', dd: 'abc' },
  { aa: 'b123', bb: 'b456', cc: 'b789', dd: 'babc' },
  { aa: 'c123', bb: 'c456', cc: 'c789', dd: 'cabc' },
  { aa: 'd123', bb: 'd456', cc: 'd789', dd: 'dabc' }
];

// 取all数组的第0条数据中的key,放到一个数组header里面
var header = Object.keys(all[0]);

// 将all数组里面的每一条对象的值取出来放到另一个新数组里面
var newDataArrays = all.map(function(item) {
  return Object.values(item);
});

// 将header和其它的新数组按照顺序放到一个二维数组里面
var result = [header].concat(newDataArrays);

console.log(result);

使用js将上面方法封装为公共方法

/**
 * 处理对象数组,提取键作为表头,提取值作为数据。
 * @param {Array} all - 输入的对象数组。
 * @returns {Array} - 包含表头和数据的二维数组。
 */
function processArray(all) {
  if (all.length === 0) {
    throw new Error("输入数组为空");
  }

  // 提取第一个对象的键作为表头
  const header = Object.keys(all[0]);

  // 提取每个对象的值作为数据
  const newDataArrays = all.map(item => Object.values(item));

  // 构建包含表头和数据的二维数组
  const result = [header, ...newDataArrays];

  return result;
}

// 示例用法
const all = [
  { aa: '123', bb: '456', cc: '789', dd: 'abc' },
  { aa: 'b123', bb: 'b456', cc: 'b789', dd: 'babc' },
  { aa: 'c123', bb: 'c456', cc: 'c789', dd: 'cabc' },
  { aa: 'd123', bb: 'd456', cc: 'd789', dd: 'dabc' }
];

const result = processArray(all);
console.log(result);

使用TS将上面方法封装为公共方法

interface DataObject {
  [key: string]: string;
}

function processArray(all: DataObject[]): any[][] {
  if (all.length === 0) {
    throw new Error("Input array is empty");
  }

  const header: string[] = Object.keys(all[0]);
  const newDataArrays: string[][] = all.map(item => Object.values(item));
  const result: any[][] = [header, ...newDataArrays];

  return result;
}

// 示例用法
const all: DataObject[] = [
  { aa: '123', bb: '456', cc: '789', dd: 'abc' },
  { aa: 'b123', bb: 'b456', cc: 'b789', dd: 'babc' },
  { aa: 'c123', bb: 'c456', cc: 'c789', dd: 'cabc' },
  { aa: 'd123', bb: 'd456', cc: 'd789', dd: 'dabc' }
];

const result: any[][] = processArray(all);
console.log(result);

将数组处理成这样后,再结合xlsx库,便可将数据导出为Excel表格,具体参考纯前端导出表格_前端导出excel-CSDN博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值