suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Der umgeschriebene Titel lautet: Drei Arrays zu Daten zusammenführen, ähnlich einer Baumstruktur

Wenn ich folgende Daten habe, wie folgt:

var data = [{
    "EmployeeID": 2,
    "FirstName": "Andrew",
    "LastName": "Fuller",
    "Country": "USA",
    "Title": "副总裁,销售",
    "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": "内部销售协调员",
            "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": "销售代表",
            "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": "销售代表",
            "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": "销售代表",
            "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": "销售经理",
            "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": "销售代表",
                    "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": "销售代表",
                    "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": "销售代表",
                    "HireDate": "1994-11-15 00:00:00",
                    "BirthDate": "1966-01-27 00:00:00",
                    "City": "London",
                    "Address": "7 Houndstooth Rd."
                }
            ]
        }
    ]
}];

console.log(data);

Ich habe separate Ajax-Aufrufe für die childrenEigenschaft jedes übergeordneten Elements und sie geben ein Array zurück. Ist es möglich, diese drei Arrays zu kombinieren, um ein Array wie das in der Geige gezeigte zu erzeugen?

Die Originalquelle der oben genannten Daten ist hier und wurde von hier bezogen

Weitere Erklärungen, die ich möchte:

Ich habe 3 Arrays zur Hand.

  1. Ein Array enthält "EmployeeID": 2,Daten.
  2. Das zweite Array enthält "EmployeeID": 8,1,3,4和5, die untergeordnete Elemente des ersten Arrays sind.
  3. Das dritte Array enthält "EmployeeID": 6,7和9, die Kinder des zweiten Arrays sind.

Ich habe alle oben genannten Arrays (oben nicht gezeigt) über Ajax-Aufrufe erhalten und habe mich gefragt, ob ich sie auf diese Weise kombinieren könnte, um Daten im oben genannten Format zu generieren. Was mich verwirrt, ist, wie man children: wie im obigen Format hinzufügt.

P粉203792468P粉203792468453 Tage vor486

Antworte allen(1)Ich werde antworten

  • P粉276577460

    P粉2765774602023-09-07 11:24:21

    在这里你可以尝试这个逻辑:
    我们可以传递具有嵌套结构的数据,例如:
    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));

    Antwort
    0
  • StornierenAntwort