Может быть я не понял сообщения, но вообще не вижу проблем при реализацииСо стором никаких проблем и не будет, ибо будет только 1 источник правды - стор. А вот без него будут все вышеописанные проблемы.
P.P.S. а что в таком случае использовать вместо remote?асинхронный IPC:
#define null 0
А значит эта особенность никак не влияет на код и не может быть причиной никаких ошибокБольшинство методов массива, такие как map или filter игнорируют пустые значения. Так что разница все таки есть и приводить к ошибкам оно может
const arr1 = new Array(10);
console.log(0 in arr1); // false
const arr2 = Array.from({length: 10});
console.log(0 in arr2); // true
неожиданно правда? connection.query('SELECT * FROM menu', (err, result) => {
if(err) { // обрабатываем ошибку запроса
console.error(err);
return;
}
// строим объект из строк с id в качестве ключей, это нужно для быстрого доступа по id
const index = result.reduce((acc, row) => ({...acc, [row.id]: row}), {});
const menu = []; // сюда будем складывать результат верхнего уровня
for(const row of result) {
if(row.parent_id === 0) { // если родителя нет
menu.push(row); // то это пункт верхнего уровня, кидаем в результат
continue; // и переходим к следующей записи
}
const parent = index[row.parent_id]; // из построенного ранее объекта находим родителя
if(!parent) { // если не нашли, то нужно сказать, что база некорректная
console.warn(`Undefined parent with id ${row.parent_id}`);
continue;
}
if(!parent.children) { // если у текущего родителя еще не добавляли потомков
parent.children = []; // то создаем из них массив
}
parent.children.push(row); // ну и добавляем к родителю текущую строку как потомка
}
console.log(menu);
});
Так как js работает с ссылками, то изменив объект в index мы его так же меняем и в result и в menufunction makeMenuLevel(menuItems) {
// на каждый уровень вложенности меню мы создаем список ul
return `<ul>${menuItems.map( // а li генерим для каждого элемента с помощью метода массива map
item =>`<li>${item.title}${item.children // если у текущего элемента есть потомки
? makeMenuLevel(item.children) // то функция рекурсивно вызывает саму себя, генеря список ul-li для потомков
: ''}</li>`;
).join('')}</ul>`;
}
io.on('menu', (data) => {
console.log(makeMenuLevel(data))
})
по железу: https://www.amazon.com/How-Computers-Work-9th-Whit... (не знаю есть ли у нее нормальный перевод)
по алгоритмам: https://www.ozon.ru/context/detail/id/139296295/
по ФП в контексте JS: https://www.ozon.ru/context/detail/id/142823895/
так же думаю много полезного можно найти тут: https://habr.com/ru/company/edison/blog/315724/