Skip to content

Instantly share code, notes, and snippets.

View artemsites's full-sized avatar

Artem Kuznecov artemsites

View GitHub Profile

Дерево — это структура данных, состоящая из узлов, где каждый узел содержит данные и ссылки на дочерние узлы. Деревья часто используются для представления иерархических данных.

Ниже приведен пример реализации дерева на JavaScript. В этом примере мы создадим простое дерево, где каждый узел может иметь несколько дочерних узлов.

Узел (Node)

Каждый узел содержит данные и массив дочерних узлов:

class TreeNode {

Связный список (или Linked List) — это структура данных, состоящая из узлов, где каждый узел содержит данные и ссылку на следующий узел в списке. Связные списки позволяют эффективно добавлять и удалять элементы, не требуя сдвига других элементов, как это происходит в массиве.

Узел (Node)

Каждый узел в связном списке содержит данные и ссылку на следующий узел:

class Node {
    public $data;
    public $next;

    public function __construct($data) {
        $this->data = $data;

Двунаправленный связный список (Double Linked List) — это структура данных, в которой каждый узел содержит ссылки на следующий и предыдущий узлы. Это позволяет легко перемещаться в обоих направлениях по списку.

Вот пример реализации двунаправленного связного списка на JavaScript:

Узел (Node)

Каждый узел содержит данные, ссылку на следующий узел и ссылку на предыдущий узел:

class Node {
import setCaretPosition from '/src/utils/setCaretPosition'
export default function(e) {
let pos = e.target.value.search(/.(?=[^\d]*$)/)
if (pos < 4) {
// !@note асинхронный обход бага vue-imask на safari 17.1 когда при первом фокусе на vue-imask он ставит курсор в конец инпута телефона
setTimeout(() => {
setCaretPosition(e.target, 4)
}, 1)
}
export function objectMergeDeep(target, source) {
Object.keys(source).forEach(key => {
const targetValue = target[key];
const sourceValue = source[key];
if (typeof sourceValue === 'object' && sourceValue !== null) {
if (typeof targetValue === 'object' && targetValue !== null) {
objectMergeDeep(targetValue, sourceValue);
} else {
target[key] = (Array.isArray(sourceValue)) ? [] : {};
// @ts-check
/**
* @export
* @param {object} targetObj
* @param {array} arPathAndValue
*
* @example objectUpdateNested(menuChoicesLS, [ this.groupId, this.programId, weekday, type, String(alt) ])
*/
export function objectUpdateNested(targetObj, arPathAndValue) {
// @ts-check
/**
* @version 20240605
*
* @export
* @class LocalStorageManager
*/
export default class LocalStorageManager {
constructor() {
this.prefix = ""
/**
* Проскроллить к элементу (верху или низу элемента)
*
* @author https://t.me/artemsites
*/
export default function scrollTo(params) {
let { selector, element, position } = params
let el = null
if (element) {
/**
* @author https://t.me/artemsites
*/
export default function isElementInViewportByAxisY(target) {
let el = (typeof target === 'string') ? document.querySelector(target) : target
const rect = el.getBoundingClientRect()
return (
rect.top <= 0
|| rect.bottom >= (window.innerHeight || document.documentElement.clientHeight)
);