tns({
swipeAngle: -1,
})
<template> | |
<Teleport to="body"> | |
<Transition> | |
<div v-if="isOpen" class="popup-overlay" @click="closePopup"> | |
<div class="popup-content" @click.stop> | |
<button class="popup-close" @click="closePopup"> | |
× | |
</button> | |
<slot></slot> |
/** | |
* import { copyToClipboard } from "/src/utils/copyToClipboard.js" | |
* | |
* copyToClipboard("Этот текст будет скопирован в буфер обмена") | |
*/ | |
export function copyToClipboard(text, callback) { | |
const textarea = document.createElement('textarea') | |
textarea.value = text | |
document.body.appendChild(textarea) |
_ |
Дерево — это структура данных, состоящая из узлов, где каждый узел содержит данные и ссылки на дочерние узлы. Деревья часто используются для представления иерархических данных.
Ниже приведен пример реализации дерева на JavaScript. В этом примере мы создадим простое дерево, где каждый узел может иметь несколько дочерних узлов.
Каждый узел содержит данные и массив дочерних узлов:
class TreeNode {
Связный список (или Linked List) — это структура данных, состоящая из узлов, где каждый узел содержит данные и ссылку на следующий узел в списке. Связные списки позволяют эффективно добавлять и удалять элементы, не требуя сдвига других элементов, как это происходит в массиве.
Каждый узел в связном списке содержит данные и ссылку на следующий узел:
class Node {
public $data;
public $next;
public function __construct($data) {
$this->data = $data;
Двунаправленный связный список (Double Linked List) — это структура данных, в которой каждый узел содержит ссылки на следующий и предыдущий узлы. Это позволяет легко перемещаться в обоих направлениях по списку.
Вот пример реализации двунаправленного связного списка на JavaScript:
Каждый узел содержит данные, ссылку на следующий узел и ссылку на предыдущий узел:
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) { |