...
из ES6, освойте, что ли, новые структуры данных. npm registry
@font-face {
font-family: 'Web font';
src: url('webfont.eot'); /* IE9 Compat Modes */
src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('webfont.woff2') format('woff2'), /* Новейшие браузеры */
url('webfont.woff') format('woff'), /* Новые браузеры и IE9+ */
url('webfont.ttf') format('truetype'), /* Старые Safari, Android, iOS */
url('webfont.svg#svgFontName') format('svg'); /* Древние Safari, iOS, Android */
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Web font';
src: url('webfont.woff2') format('woff2'),
url('webfont.ttf') format('truetype'), /* Только если нужна поддержка старых Android, иначе закомментировать */
url('webfont.woff') format('woff');
font-weight: normal;
font-style: normal;
}
const categories = [
{ id: 1, name: 'name 1', parent: null },
{ id: 2, name: 'name 2', parent: 1 },
{ id: 3, name: 'name 3', parent: 6 },
{ id: 4, name: 'name 4', parent: 5 },
{ id: 5, name: 'name 5', parent: 6 },
{ id: 6, name: 'name 6', parent: null },
{ id: 7, name: 'name 7', parent: null }
]
function buildTree (array) {
// Складываем все элементы будущего дерева в мап под id-ключами
// Так легче делать поиск родительской ноды
const map = new Map(categories.map(item => [item.id, item]));
// Обход в цикле по значениям, хранящимся в мапе
for (let item of map.values()) {
// Проверка, является ли нода дочерней (при parent === null вернет undefined)
if (!map.has(item.parent)) {
continue;
}
// Сохраняем прямую ссылку на родительскую ноду, чтобы дважды не доставать из мапа
const parent = map.get(item.parent);
// Добавляем поточную ноду в список дочерних нод родительчкого узла.
// Здесь сокращено записана проверка на то, есть ли у ноды свойство children.
parent.children = [...parent.children || [], item];
}
// Возвращаем верхний уровень дерева. Все дочерние узлы уже есть в нужных родительских нодах
return [...map.values()].filter(item => !item.parent);
}
const tree = buildTree(categories);
console.log(tree);
pixelperfect как понял только для px
console.log(false === 0) // → false
var result = {};
- и всё будет нормально.