繁体   English   中英

在 JavaScript 中显示分组的项目

[英]Display grouped items in JavaScript

我找到了这段代码,我想知道如何在表格中以以下方式显示它们:

    Males | Name   | occupation
    ---------------------------
          | Jeff   | x
          | Taylor | x
   Females| Name   | occupation
   -----------------------------
          | Megan  | x
          | Madison| x

代码:

  function groupArrayOfObjects(list, key) {
      return list.reduce(function(rv, x) {
        (rv[x[key]] = rv[x[key]] || []).push(x);
        return rv;
      }, {});
    };

    var people = [
        {sex:"Male", name:"Jeff"},
        {sex:"Female", name:"Megan"},
        {sex:"Male", name:"Taylor"},
        {sex:"Female", name:"Madison"}
    ];
    var groupedPeople=groupArrayOfObjects(people,"sex");
    console.log(groupedPeople.Male);//will be the Males 
    console.log(groupedPeople.Female);//will be the Females

这只是计算每列的最大字符数

 //copy pasted function groupArrayOfObjects(list, key) { return list.reduce(function(rv, x) { (rv[x[key]] = rv[x[key]] || []).push(x); return rv; }, {}); }; var people = [ {sex:"Male", name:"Jeff"}, {sex:"Female", name:"Megan"}, {sex:"Male", name:"Taylor"}, {sex:"Female", name:"Madison"} ]; var groupedPeople=groupArrayOfObjects(people, "sex"); //-------- const headers = { name: 'name', occupation: 'occupation' } const out = Object.keys(groupedPeople).flatMap(k => groupedPeople[k].flatMap((p, i) => { p.occupation = p.occupation || 'x' const sex = p.sex p.sex = '' return i === 0 ? [{ sex, ...headers }, p] : p })) function dump (arr) { // count each column maximum char const counts = arr.reduce((counts, p) => { Object.keys(p).forEach(f => (counts[f] = Math.max(counts[f], p[f].length))) return counts }, Object.keys(arr[0]).reduce((o, f) => (o[f] = 0, o), {})) const cv = Object.values(counts) const s = cv.reduce((acc, c) => acc + c, 0) const tot = s + (cv.length) * 2 - 1 + (cv.length - 1) //fields, pad, separator const hr = '-'.repeat(tot) console.log( arr.flatMap(p => { const row = Object.keys(p).map(f => { // pad the field to its maximum char return ` ${p[f]}`.padEnd(counts[f] + 2, ' ') }).join('|') if (p.sex.length) { return [row, hr] } return row }).join('\\n') ) } dump(out)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM