JavaScript сравнить массив объектов по ключу - PullRequest
0 голосов
/ 30 мая 2019

Я хочу сопоставить id и parentId, если совпадают, затем добавить в дочерний элемент

ex

let menuItems = [
  {
        "id": "menu-0",
        "title": "Home",
        "parentId": "menu-1",
        "childCount": 0
    },
     {
        "id": "menu-1",
        "title": "About",
        "parentId": null,
        "childCount": 2
    },
     {
        "id": "menu-3",
        "title": "About Sub1",
        "parentId": "menu-1",
        "childCount": 2
    },
     {
        "id": "menu-5",
        "title": "About Sub2",
        "parentId": "menu-1",
        "childCount": 0
    },
     {
        "id": "menu-4",
        "title": "About Sub1 sub1",
        "parentId": "menu-3",
        "childCount": 0
    },
     {
        "id": "menu-6",
        "title": "Contact",
        "parentId": null,
        "childCount": 2
    }
]
<ul>
 <li>About
     <ul>
         <li>
            About Sub1
         </li>
    </ul>
 </li>
 <li>
            Contact
 </li>
</ul>
data[i].id == data[i].parentId 

но вернуть false

Ответы [ 2 ]

0 голосов
/ 30 мая 2019
enter code here{ for (let i = 0; i < data.length; i++) {
        for (let j = 0; j < data.length; j++) {
                if(data[i].id == data[j].parentId){
                    console.log(data[i]);
                }
        }
    }

output
{id: "menu-1", title: "About", parentId: null, childCount: 2}
 {id: "menu-1", title: "About", parentId: null, childCount: 2}
 {id: "menu-3", title: "About Sub1", parentId: "menu-1", childCount: 2}

}

0 голосов
/ 30 мая 2019

Вы сравниваете id одного и того же объекта и parentId, поэтому он всегда возвращает false. Я не уверен, чего вы пытаетесь достичь, но если вы хотите рассчитать childCount, вы можете сделать что-то вроде этого:

menuItems.forEach( parent => parent.childCount = menuItems.filter( child => parent.id === child.parentId).length);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...