js 二维数组

var arr = [
            { date: '2018-10-31', a: 1, b: 2, c: 3, e: 8 },
            { date: '2018-10-27', a: 3, b: 4, c: 5, e: 7 },
            { date: '2018-10-29', a: 3, b: 4, c: 5, e: 9 },
            { date: '2018-10-30', a: 4, b: 5, c: 6, e: 0 },
            { date: '2018-10-28', a: 7, b: 8, c: 10, e: 1 },
        ];
        // 用表格展示数据
        // 要求: 按照日期倒序
        // 除日期外,计算每一项的总值 
        // 找出数组中最大的一个数字(不比较date)
        // 在table 每行加一列,假设为t; 第一行 t = c + e; 其他行 t = 上一行t - 当前行b



好心人帮帮看一看怎么写,感觉数组好迷茫!

阅读 2.5k
3 个回答
    var arr = [
        { date: '2018-10-31', a: 1, b: 2, c: 3, e: 8 },
        { date: '2018-10-27', a: 3, b: 4, c: 5, e: 7 },
        { date: '2018-10-29', a: 3, b: 4, c: 5, e: 9 },
        { date: '2018-10-30', a: 4, b: 5, c: 6, e: 0 },
        { date: '2018-10-28', a: 7, b: 8, c: 10, e: 1 },
    ];
    // 排序
    arr.sort(function(a,b){
        return Date.parse(new Date(a.date)) < Date.parse(new Date(b.date))
    })
    

clipboard.png

    
    // 针对排序后的添加t字段 
    arr.map((o,i)=>{
        i == 0 ? o.t = o.c + o.e : o.t = arr[i-1].t - o.b 
    })
    

clipboard.png

其他操作你也没说要干嘛 莫慌~

大概写了下,没仔细检查

const getTimeNum = (dateStr) => {
  let dateArr = dateStr.split('-').map((t, i) => {
    t = +t;
    if (i === 1) t--; // 月份范围 0 ~ 11
    return t;
  });
  return new Date().setFullYear(...dateArr);
}
// 排序
arr.sort((a, b) => {
  return getTimeNum(b.date) - getTimeNum(a.date);
})
// 计算总值,找最大数字,添加一列t
let maxNum = 0; // 最大数字
arr = arr.reduce((prev, cur) => {
  for (key in prev[0]) {
    if (key != 'date') {
      maxNum = Math.max(maxNum, cur[key]);
      prev[0][key] += cur[key];
    }
  }
  prev.push({
    ...cur,
    t: prev.length > 1 ? (prev[prev.length - 1].t - cur.b) : (cur.c + cur.e) // 添加一列t
  });
  return prev;
}, [{date: '', a: 0, b: 0, c: 0, e: 0}]); // arr[0] 存总值
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题