Json, используя иерархическое дерево, используя JavaScript

1

У меня есть массив JSON. Я пытаюсь преобразовать вложенное иерархическое дерево. Но это не сработало. Мне нужно иерархическое дерево, используя этот JSON.

Вот мои данные:

[{
    "_id" : "59b65ee33af7a11a3e3486c2",
    "C_TITLE" : "Sweet and Snacks",
    "C_PARENT" : "0",
    "C_ICON" : "",
    "C_IMAGE" : "59b65ee33af7a11a3e3486c2_sweets.jpg",
    "C_STATUS" : "Active"
}
{
    "_id" : "59b663d709da571dc3d79f49",
    "C_TITLE" : "Groceries",
    "C_PARENT" : "0",
    "C_ICON" : "",
    "C_IMAGE" : "59b663d709da571dc3d79f49_grocery.jpg",
    "C_STATUS" : "Active"
},
{
    "_id" : "59b6648209da571dc3d79f4a",
    "C_TITLE" : "Dals & Pulses",
    "C_PARENT" : "59b663d709da571dc3d79f49",
    "C_ICON" : "",
    "C_IMAGE" : "59b6648209da571dc3d79f4a_dals.jpg",
    "C_STATUS" : "Active"
},
{
    "_id" : "59b6657509da571dc3d79f4c",
    "C_TITLE" : "Rice & Rice products",
    "C_PARENT" : "59b663d709da571dc3d79f49",
    "C_ICON" : "",
    "C_IMAGE" : "59b6657509da571dc3d79f4c_rice.jpg",
    "C_STATUS" : "Active"
}]

Мне нужен этот вывод

[
    {
        " _id" : "59b65ee33af7a11a3e3486c2",
        "C_TITLE" : "Sweet and Snacks",
        "C_PARENT" : "0",
        "C_ICON" : "",
        "C_IMAGE" : "59b65ee33af7a11a3e3486c2_sweets.jpg",
        "C_STATUS" : "Active",
        children:[]


    }
   ]

На основании проверки C_PARENT и _id.

  • 0
    Можете ли вы добавить ожидаемый результат
  • 0
    [{"_id": "59b65ee33af7a11a3e3486c2", "C_TITLE": "Сладкие закуски", "C_PARENT": "0", "C_ICON": "", "C_IMAGE": "59b65ee33af7a11a3e3486c2_sUS" CST "CJ) .j Активны ", children: {" _id ":" ghhgfhfhhhg "," C_TITLE ":" Сладкие закуски "," C_PARENT ":" 59b65ee33af7a11a3e3486c2 "," C_ICON ":" "," C_IMAGE ":" 59b65ee3afs "ewets6116) C_STATUS ":" Active ",}}]
Показать ещё 3 комментария
Теги:

1 ответ

0

В принципе, вам нужно вместо

o[a.id]

этот

o[a._id]

потому что ваши данные имеют _id как ключевой идентификатор.

Другая проблема - это строковое сравнение с root, там вам нужна строка как значение '0', потому что это значение, которое у вас есть.

var data = [{ _id: "59b65ee33af7a11a3e3486c2", C_TITLE: "Sweet and Snacks", C_PARENT: "0", C_ICON: "", C_IMAGE: "59b65ee33af7a11a3e3486c2_sweets.jpg", C_STATUS: "Active" }, { _id: "59b663d709da571dc3d79f49", C_TITLE: "Groceries", C_PARENT: "0", C_ICON: "", C_IMAGE: "59b663d709da571dc3d79f49_grocery.jpg", C_STATUS: "Active" }, { _id: "59b6648209da571dc3d79f4a", C_TITLE: "Dals & Pulses", C_PARENT: "59b663d709da571dc3d79f49", C_ICON: "", C_IMAGE: "59b6648209da571dc3d79f4a_dals.jpg", C_STATUS: "Active" }, { _id: "59b6657509da571dc3d79f4c", C_TITLE: "Rice & Rice products", C_PARENT: "59b663d709da571dc3d79f49", C_ICON: "", C_IMAGE: "59b6657509da571dc3d79f4c_rice.jpg", C_STATUS: "Active" }],
    result = function (array, root) {
        var r = [], o = {};
        array.forEach(function (a) {
            a.children = o[a._id] && o[a._id].children; // change to a._id
            o[a._id] = a;                               // change to a._id
            if (a.C_PARENT === root) {                  // strict comparison!
                r.push(a);
                return;
            }
            o[a.C_PARENT] = o[a.C_PARENT] || {};
            o[a.C_PARENT].children = o[a.C_PARENT].children || [];
            o[a.C_PARENT].children.push(a);
        });
        return r;
    }(data, "0");                                       // "0" as root

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
  • 0
    Я сомневаюсь, что это работает для несортированного многоуровневого дерева.
  • 0
    @bluehipy, он работает для любых отсортированных необработанных данных из-за объекта o который хранит все ссылки на узлы.
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню