راکت
حل شده

ساخت آرایه ای از آبجکت ها برای لیست درختی

5 پاسخ

سلام. من یه لیست از آیتم ها به فرمت 01A02 داشتم که اونها رو به صورت یه آرایه ای از آبجکت درآوردم که هر سه قسمتش از هم جداس

: {aisle: 1, side: "A", bay: 1}
2: {aisle: 1, side: "A", bay: 2}
3: {aisle: 1, side: "A", bay: 3}
4: {aisle: 1, side: "A", bay: 4}
5: {aisle: 1, side: "A", bay: 5}
6: {aisle: 2, side: "A", bay: 1}
7: {aisle: 2, side: "A", bay: 2}
8: {aisle: 2, side: "A", bay: 3}
9: {aisle: 2, side: "A", bay: 4}
10: {aisle: 2, side: "A", bay: 5}
11: {aisle: 2, side: "B", bay: 1}
12: {aisle: 2, side: "B", bay: 2}
13: {aisle: 2, side: "B", bay: 3}
14: {aisle: 2, side: "B", bay: 4}
15: {aisle: 2, side: "B", bay: 5}
16: {aisle: 3, side: "B", bay: 1}
17: {aisle: 3, side: "B", bay: 2}
18: {aisle: 3, side: "B", bay: 3}
19: {aisle: 3, side: "B", bay: 4}
20: {aisle: 3, side: "B", bay: 5}

الان میخوام این آرایه رو به صورتی تغییر بدم که بتونم اون رو توی لیست درختی خودم نمایش بدم. برای این کار نیاز دارم به همچین آرایه ای:

[{aisle:1 , children:[ {side :'A', children:[{bay:1,bay:2}]}, {side :'B', children:[{bay:1,bay:2}]}]},
{aisle:2 , children:[ {side :'A', children:[{bay:1,bay:2}]}, {side :'B', children:[{bay:1,bay:2}]}]}]

ممنون میشم کمکم کنید اون آرایه رو به آرایه ای که میخوام تبدیل کنم؟
@sinashahoveisi

ثبت پرسش جدید

پاسخ‌ها

5
کامران داور
کامران داور
@kamran.davar

تخصص: Front-end developer

بهترین پاسخ

این کد تکمیل شدهی کد قبله. تست شده و درست کرده.

import * as React from "react";
import _ from "lodash";

function App() {
  let locationArr = [
    { aisle: 1, side: "A", bay: 1 },
    { aisle: 1, side: "A", bay: 2 },
    { aisle: 1, side: "A", bay: 3 },
    { aisle: 1, side: "A", bay: 4 },
    { aisle: 1, side: "A", bay: 5 },
    { aisle: 2, side: "A", bay: 1 },
    { aisle: 2, side: "A", bay: 2 },
    { aisle: 2, side: "A", bay: 3 },
    { aisle: 2, side: "A", bay: 4 },
    { aisle: 2, side: "A", bay: 5 },
    { aisle: 2, side: "B", bay: 1 },
    { aisle: 2, side: "B", bay: 2 },
    { aisle: 2, side: "B", bay: 3 },
    { aisle: 2, side: "B", bay: 4 },
    { aisle: 2, side: "B", bay: 5 },
    { aisle: 3, side: "B", bay: 1 },
    { aisle: 3, side: "B", bay: 2 },
    { aisle: 3, side: "B", bay: 3 },
    { aisle: 3, side: "B", bay: 4 },
    { aisle: 3, side: "B", bay: 5 },
  ];

  ///use lodash
  const aisles = _.uniq(locationArr.map((item) => item.aisle)); /// must returen [1,2,3,4]
  console.log(aisles);
  let newArrStep1 = aisles.map((aisle) => {
    console.log(aisle);
    let step1Obj = { aisle, children: [] };
    locationArr.reduce((accumulator, currentValue) => {
      if (currentValue.aisle === aisle) {
        step1Obj.children.push({
          side: currentValue.side,
          bay: currentValue.bay,
        });
      }
      return step1Obj;
    }, step1Obj);
    return step1Obj;
  });

  console.log(newArrStep1);

  let newArrStep2 = newArrStep1.map((item) => {
      const sides = _.uniq(item.children.map((child) => child.side)); /// must returen [A] or [A, B]
      console.log(sides)
    let finalObj = sides.map((side) => {
      let step1Obj = { side, children: [] };
      item.children.reduce((accumulator, currentValue) => {
        if (currentValue.side === side) {
          step1Obj.children.push({
            bay: currentValue.bay,
          });
        }
        return step1Obj;
      }, step1Obj);
      return step1Obj;
    });
      return {aisle:item.aisle,children: finalObj}
  });

    console.log(newArrStep2)
  return "convert arrey to tree structured";
}
export default App;
کامران داور
کامران داور
@kamran.davar

تخصص: Front-end developer

مسئله بسیار قشنگیه. بخشی از مسئله رو حل کردم و شما باید این کد رو توسعه بدین تا مسئله به طور کامل حل بشه.

import * as React from "react";
import "./App.css";
import _ from "lodash";

function App() {

let locationArr = [
 {aisle: 1, side: "A", bay: 1},
 {aisle: 1, side: "A", bay: 2},
 {aisle: 1, side: "A", bay: 3},
 {aisle: 1, side: "A", bay: 4},
 {aisle: 1, side: "A", bay: 5},
 {aisle: 2, side: "A", bay: 1},
 {aisle: 2, side: "A", bay: 2},
 {aisle: 2, side: "A", bay: 3},
 {aisle: 2, side: "A", bay: 4},
 {aisle: 2, side: "A", bay: 5},
 {aisle: 2, side: "B", bay: 1},
 {aisle: 2, side: "B", bay: 2},
 {aisle: 2, side: "B", bay: 3},
 {aisle: 2, side: "B", bay: 4},
 {aisle: 2, side: "B", bay: 5},
 {aisle: 3, side: "B", bay: 1},
 {aisle: 3, side: "B", bay: 2},
 {aisle: 3, side: "B", bay: 3},
 {aisle: 3, side: "B", bay: 4},
 {aisle: 3, side: "B", bay: 5}
]

///use lodash
const aisles = _.uniq(locationArr.map(item => item.aisle)); /// must returen [1,2,3,4]
console.log(aisles)
let newArrStep1 = aisles.map((aisle) => {
  console.log(aisle)
  let step1Obj = { aisle, children: [] };
  locationArr.reduce((accumulator, currentValue) => {
    if (currentValue.aisle === aisle) {
      step1Obj.children.push({
        side: currentValue.side,
        bay: currentValue.bay,
      });
    }
    return step1Obj
  }, step1Obj); 
return step1Obj}); 

console.log(newArrStep1)
return('covert arrey to tree structured')
}
export default App;

خیلی سپاس گزار خواهم بود که جواب نهایی رو همینجا به اشتراک بزارین.

کامران داور
کامران داور
@kamran.davar

تخصص: Front-end developer

نتیجه console.log(newArrStep۲) در کد بالا به شکل زیر هست:

[
  {
    "aisle": 1,
    "children": [
      {"side": "A", "bay": 1 },
      {"side": "A", "bay": 2 },
      {"side": "A", "bay": 3 },
      {"side": "A", "bay": 4 },
      {"side": "A", "bay": 5 }
    ]
  },
  {
    "aisle": 2,
    "children": [
      {"side": "A", "bay": 1 },
      {"side": "A", "bay": 2 },
      {"side": "A", "bay": 3 },
      {"side": "A", "bay": 4 },
      {"side": "A", "bay": 5 },
      {"side": "B", "bay": 1 },
      {"side": "B", "bay": 2 },
      {"side": "B", "bay": 3 },
      {"side": "B", "bay": 4 },
      {"side": "B", "bay": 5 }
    ]
  },
  {
    "aisle": 3,
    "children": [
      {"side": "B", "bay": 1 },
      {"side": "B", "bay": 2 },
      {"side": "B", "bay": 3 },
      {"side": "B", "bay": 4 },
      {"side": "B", "bay": 5 }
    ]
  }
]

شاید پاسخ شما همین‌جا باشد

کامران داور
کامران داور
@kamran.davar

تخصص: Front-end developer

نتیجه console.log(newArrStep2) در کد بالا به این شکله:

[
  {
    "aisle": 1,
    "children": [
      {
        "side": "A",
        "children": [
          { "bay": 1 },
          { "bay": 2 },
          { "bay": 3 },
          { "bay": 4 },
          { "bay": 5 }
        ]
      }
    ]
  },
  {
    "aisle": 2,
    "children": [
      {
        "side": "A",
        "children": [
          { "bay": 1 },
          { "bay": 2 },
          { "bay": 3 },
          { "bay": 4 },
          { "bay": 5 }
        ]
      },
      {
        "side": "B",
        "children": [
          { "bay": 1 },
          { "bay": 2 },
          { "bay": 3 },
          { "bay": 4 },
          { "bay": 5 }
        ]
      }
    ]
  },
  {
    "aisle": 3,
    "children": [
      {
        "side": "B",
        "children": [
          { "bay": 1 },
          { "bay": 2 },
          { "bay": 3 },
          { "bay": 4 },
          { "bay": 5 }
        ]
      }
    ]
  }
]
Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

ممنونم از کمکتون. کاملا درست با کدی که گفتین درست کار میکنه
@kamran.davar

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام