Суть проблемы такова, что скрипт работает немного не правильно... Не могу самостоятельно разобраться.
Есть массив объектов :
var routes = [
{ path: '/login', methods: [ 'GET' ] },
{ path: '/login', methods: [ 'POST' ] },
{ path: '/admin', methods: [ 'GET' ] },
{ path: '/admin', methods: [ 'POST' ] },
{ path: '/admin', methods: [ 'PUT' ] },
{ path: '/admin/mylogin', methods: [ 'GET' ] },
{ path: '/admin/mylogin', methods: [ 'POST' ] },
{ path: '/admin/mylogin/:user', methods: [ 'GET' ] },
{ path: '/admin/mylogin/:user', methods: [ 'POST' ] },
{ path: '/client', methods: [ 'GET' ] },
{ path: '/client', methods: [ 'POST' ] },
{ path: '/client/123', methods: [ 'GET' ] },
{ path: '/client/123', methods: [ 'POST' ] },
{ path: '/client/123', methods: [ 'DELETE' ] },
{ path: '/client/123', methods: [ 'PUT' ] },
{ path: '/', methods: [ 'GET' ] }
];
Нужно выбрать все совпадения
path
и запушить из совпавших в искомый
methods
, и удалить совпавший
Скрипт :
routes.forEach((element, i) => {
j = 0;
while(j < routes.length) {
if (routes[j].path === element.path && routes[j].methods !== element.methods) {
element.methods.push(routes[j].methods[0]);
routes.splice(j,1)
}
j++
}
});
В итоге у меня там где 4 и более совпавших элемента примерно такое:
{ path: '/client/123', methods: [ 'POST', 'GET', 'DELETE' ] },
{ path: '/client/123', methods: [ 'PUT' ] }
А должно быть :
{ path: '/client/123', methods: [ 'POST', 'GET', 'DELETE', 'PUT' ] }
Пробовал и
delete routes[j]
, но там удаление срабатывает вообще раньше чем выполняется условие и NodeJS ругается, что
routes[j].path
не определено.