繁体   English   中英

对嵌套的对象数组进行排序

[英]Sorting nested array of objects

我有一个对象数组,其中有一个嵌套的对象数组。 所以数组看起来像:

const list = [
  {
    A: "a1",
    B: "b1",
    C: [
      {
        A: "a22",
        B: "b12"
      },
      {
        A: "a11",
        B: "b11"
      },
      {
        A: "a10",
        B: "b10"
      }
    ]
  },
  {
    A: "a2",
    B: "b2",
    C: [
      {
        A: "a10",
        B: "b10"
      },
      {
        A: "a01",
        B: "b01"
      }
    ]
  },
  {
    A: "a0",
    B: "b0",
    C: [
      {
        A: "a22",
        B: "b22"
      },
      {
        A: "a21",
        B: "b21"
      },
      {
        A: "a20",
        B: "b20"
      }
    ]
  }
];

可以看出我有一个对象数组,每个 object 作为一个或多个字段,也是一个对象数组。 我可以根据其中一个键对对象数组进行排序,并且效果很好。 我想要做的是按嵌套数组中的一个键排序。 例如,在 C.A 上排序会产生类似(预期)的结果:

[
  {
    A: "a0",
    B: "b0",
    C: [
      {
        A: "a22",
        B: "b22"
      },
      {
        A: "a21",
        B: "b21"
      },
      {
        A: "a20",
        B: "b20"
      }
    ]
  },
  {
    A: "a1",
    B: "b1",
    C: [
      {
        A: "a12",
        B: "b12"
      },
      {
        A: "a11",
        B: "b11"
      },
      {
        A: "a10",
        B: "b10"
      }
    ]
  },
  {
    A: "a2",
    B: "b2",
    C: [
      {
        A: "a10",
        B: "b10"
      },
      {
        A: "a01",
        B: "b01"
      }
  }
];

想法?

弄清楚这些事情的方法是将排序函数分解为明确的目标 state ,就像这样(我想我理解目标)......

 // sort a and b by the smallest value of A in their C arrays const myCompare = (a, b) => { return a.minAinC.localeCompare(b.minAinC); }; // get the lexically smallest value of A in an object's C array const minAinC = obj => { const minC = obj.C.reduce((acc, o) => acc.A.localeCompare(oA) > 0? o: acc, obj.C[0]) return minC.A; }; // preprocess the outer array and cache a minAinC value on each, making the next sort efficient (optional) const data = getData() const readyToSort = data.map(o => ({...o, minAinC: minAinC(o) })); const sorted = readyToSort.sort(myCompare) console.log(sorted) function getData() { return [{ A: "a1", B: "b1", C: [{ A: "a22", B: "b12" }, { A: "a11", B: "b11" }, { A: "a10", B: "b10" } ] }, { A: "a2", B: "b2", C: [{ A: "a10", B: "b10" }, { A: "a01", B: "b01" } ] }, { A: "a0", B: "b0", C: [{ A: "a22", B: "b22" }, { A: "a21", B: "b21" }, { A: "a20", B: "b20" } ] } ]; }

暂无
暂无

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

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