Member 11366370 Ответов: 1

Преобразование массива в измененный объект


let a = ["CBSE/X-White","HOS/A/A1","FoodHOS/S1","CBSE/X-Green","HOS/A/A2","FoodHOS/S1","CBSE/IX-White","HOS/B/B1","FoodHOS/S1","TRP/T1"]

Я пытаюсь преобразовать вышеописанное значение "ля" ниже объекта мы можем наблюдать, что это были также уникальные значения.

I вывод должен быть таким после преобразования
{
   "CBSE":[
      "X-WHITE",
      "X-Green",
      "IX-White"
   ],
   "HOS":{
      "A":[
         "A1",
         "A2"
      ],
      "B":[
         "B1"
      ]
   },
   "FoodHOS":[
      "S1",
      "S2"
   ],
   "TRP":[
      "T1"
   ]
}


Что я уже пробовал:

Я обращен в веру. "ля" в приведенной ниже форме с этим кодом

                   const munge = a =>
						a.reduce((res, e) => {
							e = e.split("/");
							let a = {};
							let previousKey = e.shift();
							res[previousKey] = a;
							let root = res;
							while (e.length) {
								const newKey = e.shift();
								
								if(e.length == 0){
									let b = [];
									b.push(newKey);
									root[previousKey] = b;
								}
								else
									a[newKey] = {};
								
								if (e.length) {
									root = a;
									a= a[newKey];
								} 
								previousKey = newKey;
							}

							return res;
						}, {});				

					console.log(JSON.stringify(munge(a)));
//--------------------------------------------------------------
//What i got the result is below

   {
   "CBSE":[
      "IX-White"
   ],
   "HOS":{
      "B":[
         "B1"
      ]
   },
   "FoodHOS":[
      "S1"
   ],
   "TRP":[
      "T1"
   ]
}

Я думаю, что получил все последние значения

Кто-нибудь может мне помочь ?

1 Ответов

Рейтинг:
2

Zalak Artist

Привет, попробуйте этот код. Это не очень динамично, но посмотрите, дает ли это вам какую-то идею

let obj = {};
   let arrtemp = {};

   a.forEach(function (item) {
       arr = item.split("/");
       let temp = {};
       let previousKey = arr.shift();

       if (!(obj ? hasOwnProperty.call(obj, previousKey) : false)) {
           obj[previousKey] = temp;
           let root = obj;
           while (arr.length) {
               const newKey = arr.shift();

               if (arr.length == 0) {
                   let b = [];
                   b.push(newKey);
                   root[previousKey] = b;
               }
               else
                   temp[newKey] = {};

               if (arr.length) {
                   root = temp;
                   temp = temp[newKey];
               }
               previousKey = newKey;
           }
           arrtemp = obj;
       }
       else {
           const newKey = arr.shift();
           if (arr.length == 0 && obj[previousKey].indexOf(newKey) < 0) {
               obj[previousKey].push(newKey);
           }
           else {
               obj[previousKey][newKey] = {};

               if (arr.length) {
                   let b = [];
                   b.push(arr.shift());
                   obj[previousKey][newKey] = b;
               }
           }

       }
   });

   console.log(JSON.stringify(arrtemp));