書き換えられたタイトルは次のとおりです: 3 つの配列をツリー構造に似たデータに結合する
P粉203792468
P粉203792468 2023-09-06 19:44:37
0
1
497

次のようなデータがあるとします。

リーリー

各親の children プロパティに対して個別の Ajax 呼び出しがあり、配列が返されます。これら 3 つの配列を組み合わせて、フィドルに示されているような配列を生成することは可能ですか?

上記のデータの元のソースはここにあり、ここから取得されます

もっと説明が欲しい:

手元に 3 つのアレイがあります。

  1. 配列には "EmployeeID": 2, のデータが含まれています。
  2. 2 番目の配列には、"EmployeeID": 8,1,3,4 および 5 が含まれており、これらは最初の配列の子です。
  3. 3 番目の配列には "EmployeeID": 6、7、9 が含まれており、これらは 2 番目の配列の子です。

Ajax 呼び出しを介して上記の配列 (上には表示されていません) をすべて取得し、これらをこの方法で結合して上記の形式のデータを生成できるかどうか疑問に思っていました。 私を混乱させるのは、上記の形式 のように children を追加する方法です。

P粉203792468
P粉203792468

全員に返信(1)
P粉276577460

ここで、このロジックを試すことができます:
例:
data->childrenArray->data->childrenArray など、ネストされた構造でデータを渡すことができます。 MakeNestedInLinear(data) では、単一の配列 (線形データ) でフラットな結果が返されます

var data = [
  {
    EmployeeID: 2,
    FirstName: "Andrew",
    LastName: "Fuller",
    Country: "USA",
    Title: "Vice President, Sales",
    HireDate: "1992-08-14 00:00:00",
    BirthDate: "1952-02-19 00:00:00",
    City: "Tacoma",
    Address: "908 W. Capital Way",
    expanded: "true",
    children: [
      {
        EmployeeID: 8,
        FirstName: "Laura",
        LastName: "Callahan",
        Country: "USA",
        Title: "Inside Sales Coordinator",
        HireDate: "1994-03-05 00:00:00",
        BirthDate: "1958-01-09 00:00:00",
        City: "Seattle",
        Address: "4726 - 11th Ave. N.E.",
      },
      {
        EmployeeID: 1,
        FirstName: "Nancy",
        LastName: "Davolio",
        Country: "USA",
        Title: "Sales Representative",
        HireDate: "1992-05-01 00:00:00",
        BirthDate: "1948-12-08 00:00:00",
        City: "Seattle",
        Address: "507 - 20th Ave. E.Apt. 2A",
      },
      {
        EmployeeID: 3,
        FirstName: "Janet",
        LastName: "Leverling",
        Country: "USA",
        Title: "Sales Representative",
        HireDate: "1992-04-01 00:00:00",
        BirthDate: "1963-08-30 00:00:00",
        City: "Kirkland",
        Address: "722 Moss Bay Blvd.",
      },
      {
        EmployeeID: 4,
        FirstName: "Margaret",
        LastName: "Peacock",
        Country: "USA",
        Title: "Sales Representative",
        HireDate: "1993-05-03 00:00:00",
        BirthDate: "1937-09-19 00:00:00",
        City: "Redmond",
        Address: "4110 Old Redmond Rd.",
      },
      {
        EmployeeID: 5,
        FirstName: "Steven",
        LastName: "Buchanan",
        Country: "UK",
        Title: "Sales Manager",
        HireDate: "1993-10-17 00:00:00",
        BirthDate: "1955-03-04 00:00:00",
        City: "London",
        Address: "14 Garrett Hill",
        expanded: "true",
        children: [
          {
            EmployeeID: 6,
            FirstName: "Michael",
            LastName: "Suyama",
            Country: "UK",
            Title: "Sales Representative",
            HireDate: "1993-10-17 00:00:00",
            BirthDate: "1963-07-02 00:00:00",
            City: "London",
            Address: "Coventry House Miner Rd.",
          },
          {
            EmployeeID: 7,
            FirstName: "Robert",
            LastName: "King",
            Country: "UK",
            Title: "Sales Representative",
            HireDate: "1994-01-02 00:00:00",
            BirthDate: "1960-05-29 00:00:00",
            City: "London",
            Address: "Edgeham Hollow Winchester Way",
          },
          {
            EmployeeID: 9,
            FirstName: "Anne",
            LastName: "Dodsworth",
            Country: "UK",
            Title: "Sales Representative",
            HireDate: "1994-11-15 00:00:00",
            BirthDate: "1966-01-27 00:00:00",
            City: "London",
            Address: "7 Houndstooth Rd.",
          },
        ],
      },
    ],
  },
];

function MakeNestedInLinear(data) {
  return data.reduce((acc, elem) => {
    let stack = [elem];
    while (stack.length) {
      let val = stack.shift();
      if (val && val.children) {
        stack.push(...val.children);
        delete val.children;
        acc.push(val);
      } else acc.push(val);
    }
    return acc;
  }, []);
}

console.log(MakeNestedInLinear(data));
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート