Содержание

Как очистить массив в Javascript

В большинстве случаев мы используем массивы Когда мы работаем с JavaScript или с любой другой язык, Поскольку мы позволяем Лучшие манипуляции и группировки некоторых аналогичные характеристики наборов данных.

Среди всех возможных операции что я могу сделать массив, один из самых Общие Это из удалено o опорожнение, которые сделают мы будем конвертировать в массив пустой массив.

 

Как очистить или удалить массив Javascript и его последствия

 

Для выполнения опорожнение или исключить из массив Мы можем использовать две реализации o решения, которые мы увидим ниже. Предположим У нас есть массив в переменной MyArray со следующим содержимым:

var miArray = [1, 2, 3, 4, 5];

var miArray = [1, 2, 3, 4, 5];

Мы можем выполнить опорожнение из массива при помощи назначение из пустой массив в переменную:

Поэтому переменная MyArray Теперь будет указывая для пустой массив. Т.е., Это не предыдущий массив пустой, но что переменная указывает один Новая позиция памяти. Чтобы понять это, Предположим, что следующие переменные:

var miArray = [1, 2, 3, 4, 5]; var miOtroArray = miArray;

var miArray = [1, 2, 3, 4, 5];

 

var miOtroArray = miArray;

Если сейчас, Мы осуществляем Удаление первого массива как мы уже видели ранее:

miArray = []; //Los valores de las variables anteriores son: //miArray = []; //miOtroArray = [1, 2, 3, 4 ,5];

miArray = [];

 

//Los valores de las variables anteriores son:

//miArray = [];

//miOtroArray = [1, 2, 3, 4 ,5];

переменная miOtroArray Он будет продолжать указывать на расположение в памяти, на котором размещается массив

было ранее назначенных переменная MyArray, потому что с помощью этого решения, Единственное, что мы делаем это назначить в переменной новый пустой массив в другое расположение в памяти.

Для избежать этого, другой слива метод o удалено из массив в JavaScript через Недвижимость Длина, Типа того, Мы опорожняться наш первый массив следующим образом:

miArray.length = 0; //No reasignamos a un nuevo valor, sino que reducimos la longitud del actual. //Los valores de las variables anteriores son: //miArray = []; //miOtroArray = [];

miArray.length = 0;  //No reasignamos a un nuevo valor, sino que reducimos la longitud del actual.

 

//Los valores de las variables anteriores son:

//miArray = [];

//miOtroArray = [];

Таким образом, Мы делаем это Длина из наших текущий массив Это ноль, так ты опорожнение, и следует переменная указывая на тот же массив, так другие возможные переменные или указатели, Он указал на то же самое, они будут иметь то же значение Это. Таким образом мы

Мы избежать каких-либо проблем с переменные и указатели Это может привести к Переназначение новый массив, как в первый случай.

В дополнение, Это последнее решение, Это решение Лучшие что касается производительность Поскольку действительно освобождает память назначен в массив. Если мы используем Первое решение, В дополнение к выделить память для нового массива пуст, Мы не освобождает выделенную память в предыдущий массив, в случае на нее указывает что любой другой переменной или указатель.

Присоединиться к вам к каналу Телеграмма

Оставьте нам комментарий или ввестиФорум

Родственные статьи

Методы without, remove, reject в lodash

Всем привет. Мы продолжаем изучать лодаш. Сегодня мы поговорим о таких методах как without, remove и reject. Метод without не работает так же как map, each или filter.

_.without([1,2,3], 1, 2)

Первым аргументом идет массив, а остальные аргументы — это сколько угодно значений, которые нужно удалить. В данном случае мы удаляем значения 1 и 2 из массива. В результате выполнения нам вернулся новый массив только с одним елементом. Очень важно помнить что этот метод не работает с массивами обьектов и не нужно думать, что он вообще должен это делать.

_.without([{id:1, name:"1"}, {id:2, name: "2"}], {id:1, name:"1"})

Если у нас есть массив обьектов и мы вторым аргументом напишем обьект, который хотим удалить, то у нас все также вернется 2 елемента. Так как 2 обьекта не могут быть равны, а равны могут быть только строки, булевые переменные и числа, поэтому так использовать метод _.without нельзя.

И еще иногда разработчики очень любят писать вот такой код и тоже не понимают почему он не работает. В основном потому что не читают документацию.

_.without([{id:1, name:"1"}], function (item) {
  return item.id;
})

Если мы думаем, что метод without работает так же, как filter, то да, тогда бы этот код работал и он бы удалил у нас из массива все елементы с id: 1. Но, как мы видим так этот метод не работает, потому что without просто не принимает вторым аргументом функцию.

Что же делать если мы хотим удалить данные из массива по какому-то условию? Для этого есть метод remove. Вот он как раз работает ожидаемо. Первый аргумент массив, а второй итератор

Создадим массив а и вызовем функцию remove на этот массив.

a = [{id:1, name:"1"}, {id:2, name: "2"}]
_.remove(a, function (item) {
  return item.id === 2;
})

Вроде бы все хорошо, но есть одно большое НО. Remove является мутабельным методом. Если мы посмотрим на переменную а, то мы увидим, что она изменилась. Т.е. метод remove не возвращает новый массив как filter или map, а он изменяет исходный массив. И с этим всегда нужно быть внимательным.

Что же делать если мы не хотим менять исходный массив, а хотим получить новый? Нам ничто не мешает использовать уже существующий метод фильтр

_.filter([{id:1, name:"1"}, {id:2, name: "2"}], function (item) {
  return item.2 !== 2;
})

Мы можем просто указать условие с отрицанием и тем самым получим все елементы, которые мы хотим оставить в массиве. Как мы видим в результате мы получили массив с одним елементом, и елемент с id: 2 здесь уже не участвует. Это самый просто способ отфильтровать не нужные нам елементы.

Ну а другой вариант, это использовать метод reject. Он как раз и является методом, обратным методу filter. Он работает абсолютно так же как в filter, но возвращает массив елементов, которые не выполняют условие.

_.reject([{id:1, name:"1"}, {id:2, name: "2"}], function (item) {
  return item.id == 2;
})

Здесь reject выполнится и удалит елементы у которых id равно 2. Когда вы вызываете reject, вы должны помнить, что в условии указываются те елементы, которые должны быть удалены.

Также вы можете использовать укороченную запись.

_.reject([{id:1, name:"1"}, {id:2, name: "2"}], {id: 2})

Метод remove я советую использовать как можно реже, так как он меняет исходные данные. Метод without тоже лучше не использовать так как он не достаточно гибкий.

На сегодня все, а в следующем уроке мы разберем методы reduce и every.

Удаление дубликатов в массиве ES6: три основных метода решения

От автора: вот три способа отфильтровать дубликаты из массива и вернуть только уникальные значения. Мой любимый — с использованием Set. Он быстрее и проще всего позволяет произвести удаление дубликатов в массиве.

1. Использование Set

Позвольте мне начать с объяснения того, что представляет собой Set: Set — это новый объект данных, представленный в ES6. Так как Set позволяет хранить только уникальные значения, когда вы передаете в него массив, он удалит все повторяющиеся значения.

Хорошо, давайте вернемся к нашему коду и разберем, что происходит. А происходят 2 вещи:

Сначала мы создаем новый Set, передавая ему массив. Поскольку Set допускаются только уникальные значения, все дубликаты будут удалены.

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Узнать подробнее

Теперь дубликаты исчезли, мы преобразуем их обратно в массив с помощью оператора spread…

Преобразуем Set в массив, используя Array.from

Кроме того, вы можете использовать Array.from для преобразования Set в массив:

2. Использование filter

Чтобы понять этот вариант, давайте рассмотрим, что делают эти два метода: indexOf и filter.

indexOf

Метод indexOf возвращает первый индекс предоставленного элемента, который он находит в нашем массиве.

filter

Метод filter() создает новый массив элементов , которые соответствуют предоставленным условиям. Другими словами, если элемент соответствует и возвращается true, он будет включен в фильтруемый массив. И любой элемент, который не соответствует или возвращает false, НЕ будет включен в фильтрованный массив.

Давайте рассмотрим, что происходит, когда мы перебираем массив.

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Узнать подробнее

Ниже приведен вывод из файла console.log, показанный выше. Дубликаты — это место, где индекс не совпадает с indexOf. Таким образом, в этих случаях условие будет ложным и не будет включено в наш фильтрованный массив.

Извлечение повторяющихся значений

Мы также можем использовать метод filter для извлечения дублированных значений из массива. Мы можем сделать это, просто настроив условие следующим образом:

Опять же, если мы выполним код, то получим:

3. Использование reduce

Метод reduce используется для сокращения элементов массива и объединения их в окончательный массив на основе некоторой переданной функции редуктора.

В этом случае наша функция-редуктор проверяет, содержит ли наш последний массив элемент. Если это не так, вставляем этот элемент в конечный массив. В противном случае пропускаем этот элемент и возвращаем только окончательный массив как есть (по сути, пропуская этот элемент).

reduce немного сложнее для понимания, поэтому рассмотрим подробно каждый случай:

И вот вывод из console.log:

Автор: Samantha Ming

Источник: //medium.com/

Редакция: Команда webformyself.

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Узнать подробнее

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Смотреть

JSON — Массивы

Массивы в JSON почти то же самое, что массивы в JavaScript.

В JSON элементами массива могут быть строки, числа, объекты, массивы, boolean или null.

В JavaScript элементами массива кроме перечисленных также могут быть другие допустимые выражения JavaScript, включая функции, даты и undefined.

Пример:


[ "Ford", "BMW", "Fiat" ] 

Массивы в объектах JSON

Массивы могут быть значениями свойств объектов:


{
   "name":"John",
   "age":30,
   "cars":[ "Ford", "BMW", "Fiat" ]
} 

Доступ к значениям массива

Получить доступ к значению элемента массива можно при помощи номера его индекса:


x = myObj.cars[0];

Обход элементов массива

Последовательно обойти все элементы массива можно при помощи цикла for-in:


for (i in myObj.cars) {
     x += myObj.cars[i];
} 

Или при помощи цикла for:


for (i = 0; i < myObj.cars.length; i++) {
    x += myObj.cars[i];
} 

Вложенные массивы в объектах JSON

Значениями массива также могут быть другие массивы или даже другие объекты JSON:


myObj = {
    "name":"John",
    "age":30,
    "cars": [
        { "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] },
        { "name":"BMW", "models":[ "320", "X3", "X5" ] },
        { "name":"Fiat", "models":[ "500", "Panda" ] }
     ]
 } 

Чтобы получить доступ к массивам внутри других массивов, используйте цикл

for-in для каждого массива:


for (i in myObj.cars) {
    x += "<h2>" + myObj.cars[i].name + "</h2>";
    for (j in myObj.cars[i].models) {
         x += myObj.cars[i].models[j];
    }
}

Изменение значений массива

Чтобы изменить значение элемента массива, используется его номер индекса:


myObj.cars[1] = "Mercedes"; 

Удаление элемента массива

Чтобы удалить элемент из массива, используется ключевое слово delete:


delete myObj.cars[1]; 

JSON.parse() Вверх JSON — Объекты

Манипуляции с DOM на чистом JavaScript JavaScript DOM

Как правило, когда нужно выполнить какие-либо действия с DOM, разработчики используют jQuery. Однако практически любую манипуляцию с DOM можно сделать и на чистом JavaScript с помощью его DOM API.

Рассмотрим этот API более подробно:

В конце вы напишете свою простенькую DOM-библиотеку, которую можно будет использовать в любом проекте.

DOM-запросы

В материале представлены основы JavaScript DOM API. Все подробности и детали доступны на Mozilla Developer Network.

DOM-запросы осуществляются с помощью метода .querySelector(), который в качестве аргумента принимает произвольный СSS-селектор.

const myElement = document.querySelector('#foo > div.bar')

Он вернёт первый подходящий элемент. Можно и наоборот — проверить, соответствует ли элемент селектору:

myElement.matches('div.bar') === true

Если нужно получить все элементы, соответствующие селектору, используйте следующую конструкцию:

const myElements = document.querySelectorAll('.bar')

Если же вы знаете, на какой родительский элемент нужно сослаться, можете просто проводить поиск среди его дочерних элементов, вместо того чтобы искать по всему коду:

const myChildElemet = myElement.querySelector('input[type="submit"]')
// Вместо:
// document.querySelector('#foo > div.bar input[type="submit"]')

Возникает вопрос: зачем тогда использовать другие, менее удобные методы вроде .getElementsByTagName()? Есть маленькая проблема — результат вывода .querySelector() не обновляется, и когда мы добавим новый элемент (смотрите раздел 5), он не изменится.

const elements1 = document.querySelectorAll('div')
const elements2 = document.getElementsByTagName('div')
const newElement = document.createElement('div')

document.body.appendChild(newElement)
elements1.length === elements2.length // false

Также querySelectorAll() собирает всё в один список, что делает его не очень эффективным.

Как работать со списками?

Вдобавок ко всему у .querySelectorAll() есть два маленьких нюанса. Вы не можете просто вызывать методы на результаты и ожидать, что они применятся к каждому из них (как вы могли привыкнуть делать это с jQuery). В любом случае нужно будет перебирать все элементы в цикле. Второе — возвращаемый объект является списком элементов, а не массивом. Следовательно, методы массивов не сработают. Конечно, есть методы и для списков, что-то вроде .forEach(), но, увы, они подходят не для всех случаев. Так что лучше преобразовать список в массив:

// Использование Array.from()
Array.from(myElements).forEach(doSomethingWithEachElement)
// Или прототип массива (до ES6)
Array.prototype.forEach.call(myElements, doSomethingWithEachElement)
// Проще:
[].forEach.call(myElements, doSomethingWithEachElement)

У каждого элемента есть некоторые свойства, ссылающиеся на «семью».

myElement.children
myElement.firstElementChild
myElement.lastElementChild
myElement.previousElementSibling
myElement.nextElementSibling

Поскольку интерфейс элемента (Element) унаследован от интерфейса узла (Node), следующие свойства тоже присутствуют:

myElement.childNodes
myElement.firstChild
myElement.lastChild
myElement.previousSibling
myElement.nextSibling
myElement.parentNode
myElement.parentElement

Первые свойства ссылаются на элемент, а последние (за исключением .parentElement) могут быть списками элементов любого типа. Соответственно, можно проверить и тип элемента:

myElement.firstChild.nodeType === 3 // этот элемент будет текстовым узлом

Добавление классов и атрибутов

Добавить новый класс очень просто:

myElement.classList.add('foo')
myElement.classList.remove('bar')
myElement.classList.toggle('baz')

Добавление свойства для элемента происходит точно так же, как и для любого объекта:

// Получение значения атрибута
const value = myElement.value

// Установка атрибута в качестве свойства элемента
myElement.value = 'foo'

// Для установки нескольких свойств используйте .Object.assign()
Object.assign(myElement, {
 value: 'foo',
 id: 'bar'
})

// Удаление атрибута
myElement.value = null

Можно использовать методы .getAttibute(), .setAttribute() и .removeAttribute(). Они сразу же поменяют HTML-атрибуты элемента (в отличие от DOM-свойств), что вызовет браузерную перерисовку (вы сможете увидеть все изменения, изучив элемент с помощью инструментов разработчика в браузере). Такие перерисовки не только требуют больше ресурсов, чем установка DOM-свойств, но и могут привести к непредвиденным ошибкам.

Как правило, их используют для элементов, у которых нет соответствующих DOM-свойств, например colspan. Или же если их использование действительно необходимо, например для HTML-свойств при наследовании (смотрите раздел 9).

Добавление CSS-стилей

Добавляют их точно так же, как и другие свойства:

myElement.style.marginLeft = '2em'

Какие-то определённые свойства можно задавать используя .style, но если вы хотите получить значения после некоторых вычислений, то лучше использовать window.getComputedStyle(). Этот метод получает элемент и возвращает CSSStyleDeclaration, содержащий стили как самого элемента, так и его родителя:

window.getComputedStyle(myElement).getPropertyValue('margin-left')

Изменение DOM

Можно перемещать элементы:

// Добавление element1 как последнего дочернего элемента element2
element1.appendChild(element2)
// Вставка element2 как дочернего элемента element1 перед element3
element1.insertBefore(element2, element3)

Если не хочется перемещать, но нужно вставить копию, используем:

// Создание клона
const myElementClone = myElement.cloneNode()
myParentElement.appendChild(myElementClone)

Метод .cloneNode()  принимает булевое значение в качестве аргумента, при true также клонируются и дочерние элементы.

Конечно, вы можете создавать новые элементы:

const myNewElement = document.createElement('div')
const myNewTextNode = document.createTextNode('some text')

А затем вставлять их как было показано выше. Удалить элемент напрямую не получится, но можно сделать это через родительский элемент:

myParentElement.removeChild(myElement)

Можно обратиться и косвенно:

myElement.parentNode.removeChild(myElement)

Методы для элементов

У каждого элемента присутствуют такие свойства, как .innerHTML и .textContent, они содержат HTML-код и, соответственно, сам текст. В следующем примере изменяется содержимое элемента:

// Изменяем HTML
myElement.innerHTML = `
  <div>
    <h3>New content</h3
    <p>beep boop beep boop</p>
  </div>
`

// Таким образом содержимое удаляется 
myElement.innerHTML = null

// Добавляем к HTML
myElement.innerHTML += `
  <a href="foo.html">continue reading...</a>
  <hr/>

На самом деле изменение HTML — плохая идея, т. к. теряются все изменения, которые были сделаны ранее, а также перегружаются обработчики событий. Лучше использовать такой способ только полностью отбросив весь HTML и заменив его копией с сервера. Вот так:

const link = document.createElement('a')
const text = document.createTextNode('continue reading...')
const hr = document.createElement('hr')

link.href = 'foo.html'
link.appendChild(text)
myElement.appendChild(link)
myElement.appendChild(hr)

Однако это повлечёт за собой две перерисовки в браузере, в то время как .innerHTML приведёт только к одной. Обойти это можно, если сначала добавить всё в DocumentFragment, а затем добавить нужный вам фрагмент:

const fragment = document.createDocumentFragment()

fragment.appendChild(text)
fragment.appendChild(hr)
myElement.appendChild(fragment)

Обработчики событий

Один из самых простых обработчиков:

myElement.onclick = function onclick (event) {
 console.log(event.type + ' got fired')
}

Но, как правило, его следует избегать. Здесь .onclick — свойство элемента, и по идее вы можете его изменить, но вы не сможете добавлять другие обработчики используя ещё одну функцию, ссылающуюся на старую.

Для добавления обработчиков лучше использовать .addEventListener(). Он принимает три аргумента: тип события, функцию, которая будет вызываться всякий раз при срабатывании, и объект конфигурации (к нему мы вернёмся позже).

myElement.addEventListener('click', function (event) {
 console.log(event.type + ' got fired')
})

myElement.addEventListener('click', function (event) {
 console.log(event.type + ' got fired again')
})

Свойство event.target обращается к элементу, за которым закреплено событие.

А так вы сможете получить доступ ко всем свойствам:

// Свойство `forms` — массив, содержащий ссылки на все формы
const myForm = document.forms[0]
const myInputElements = myForm.querySelectorAll('input')
Array.from(myInputElements).forEach(el => {
 el.addEventListener('change', function (event) {
   console.log(event.target.value)
 })
})

Предотвращение действий по умолчанию

Для этого используется метод .preventDefault(), который блокирует стандартные действия. Например, он заблокирует отправку формы, если авторизация на клиентской стороне не была успешной:

myForm.addEventListener('submit', function (event) {
 const name = this.querySelector('#name')

 if (name.value === 'Donald Duck') {
   alert('You gotta be kidding!')
   event.preventDefault()
 }
})

Метод .stopPropagation() поможет, если у вас есть определённый обработчик события, закреплённый за дочерним элементом, и второй обработчик того же события, закреплённый за родителем.

Как говорилось ранее, метод .addEventListener() принимает третий необязательный аргумент в виде объекта с конфигурацией. Этот объект должен содержать любые из следующих булевых свойств (по умолчанию все в значении false):

  • capture: событие будет прикреплено к этому элементу перед любым другим элементом ниже в DOM;
  • once: событие может быть закреплено лишь единожды;
  • passive: event.preventDefault() будет игнорироваться (исключение во время ошибки).

Наиболее распространённым свойством является .capture, и оно настолько распространено, что для этого существует краткий способ записи: вместо того чтобы передавать его в объекте конфигурации, просто укажите его значение здесь:

myElement.addEventListener(type, listener, true)

Обработчики удаляются с помощью метода .removeEventListener(), принимающего два аргумента: тип события и ссылку на обработчик для удаления. Например свойство once можно реализовать так:

myElement.addEventListener('change', function listener (event) {
 console.log(event.type + ' got triggered on ' + this)
 this.removeEventListener('change', listener)
})

Наследование

Допустим, у вас есть элемент и вы хотите добавить обработчик событий для всех его дочерних элементов. Тогда бы вам пришлось прогнать их в цикле, используя метод myForm.querySelectorAll('input'), как было показано выше. Однако вы можете просто добавить элементы в форму и проверить их содержимое с помощью event.target.

myForm.addEventListener('change', function (event) {
 const target = event.target
 if (target.matches('input')) {
   console.log(target.value)
 }
})

И ещё один плюс данного метода заключается в том, что к новым дочерним элементам обработчик будет привязываться автоматически.

Анимация

Проще всего добавить анимацию используя CSS со свойством transition. Но для большей гибкости (например для игры) лучше подходит JavaScript.

Вызывать метод window.setTimeout(), пока анимация не закончится, — не лучшая идея, так как ваше приложение может зависнуть, особенно на мобильных устройствах. Лучше использовать window.requestAnimationFrame() для сохранения всех изменений до следующей перерисовки. Он принимает функцию в качестве аргумента, которая в свою очередь получает метку времени:

const start = window.performance.now()
const duration = 2000

window.requestAnimationFrame(function fadeIn (now)) {
 const progress = now - start
 myElement.style.opacity = progress / duration

 if (progress < duration) {
   window.requestAnimationFrame(fadeIn)
 }
}

Таким способом достигается очень плавная анимация. В своей статье Марк Браун рассуждает на данную тему.

Пишем свою библиотеку

Тот факт, что в DOM для выполнения каких-либо операций с элементами всё время приходится перебирать их, может показаться весьма утомительным по сравнению с синтаксисом jQuery $('.foo').css({color: 'red'}). Но почему бы не написать несколько своих методов, облегчающую данную задачу?

 

const $ = function $ (selector, context = document) {
const elements = Array.from(context.querySelectorAll(selector))

 return {
   elements,

   html (newHtml) {
     this.elements.forEach(element => {
       element.innerHTML = newHtml
     })

     return this
   },

   css (newCss) {
     this.elements.forEach(element => {
       Object.assign(element.style, newCss)
     })

     return this
   },

   on (event, handler, options) {
     this.elements.forEach(element => {
       element.addEventListener(event, handler, options)
     })

     return this
   }

 
 }
}

Теперь у вас есть своя маленькая библиотека, в которой находится всё, что вам нужно.

Здесь находится ещё много таких помощников.

Пример использования

Заключение

Теперь вы знаете, что для реализации простого модального окна или навигационного меню не обязательно прибегать к помощи сторонних фреймворков. Ведь в DOM API это уже всё есть, но, конечно, у данной технологии есть и свои минусы. Например всегда приходится вручную обрабатывать списки элементов, в то время как в jQuery это происходит по щелчку пальцев.

Перевод статьи «The Basics of DOM Manipulation in Vanilla JavaScript (No jQuery)»

Открывая легенду Żubrówka: история создания аутентичного бренда

По версии авторитетного издания Shanken’s IMPACT magazine, Żubrówka вошла в ТОП-3 крупнейших мировых водочных бренда по результатам 2020 года, а также стала 23 крупнейшим алкогольным брендом в мире. Кроме этого, по результатам 2020 года ТМ Żubrówka – № 1 водочный импортный бренд на рынке Украины.

Интересно От алхимиков до нашего времени: история водки и особенности ее изготовления

Ежедневно Żubrówka экспортируют в более 70 стран мира, среди которых США, Япония, Австралия, Франция, Великобритания, Германия и Украина. Ее вкус и аромат покорил не только миллионов потребителей, но и лучших экспертов в алкогольной отрасли: профессиональных дегустаторов, рестораторов и представителей гостиничного бизнеса.

Żubrówka – это не только успешный бренд с мировым именем, но и самая узнаваемая лавмарка, которая стала уникальным символом Польши.

Продукция Żubrówka изготавливается из лучших натуральных компонентов, каждый из которых отобран с особой заботой. Производитель тщательно контролирует, чтобы каждая бутылка Zubrowka была изготовлена согласно европейским стандартам качества.


Żubrówka изготовлена по европейским стандартам качества / Фото Żubrówka

Żubrówka начинает свой путь в густых дебрях последнего нетронутого леса Европы – Беловежской Пуще. На территории этого уникального заповедника проживают крупнейшие наземные млекопитающие Восточноевропейской равнины – беловежские зубры. Огромный размер и невероятная физическая сила делают их неуязвимыми для хищников. Их считают одним из символов свободы и дикой природы. Эти надменные красавцы являются настоящим украшением этого величественного леса.


Żubrówka берет свое начало из Беловежской Пущи / Фото Żubrówka

Именно здесь, в Беловежской Пуще, рождаются напитки Żubrówkа, черпающие силы от первозданной природы пралесов. Оригинальный дизайн бутылок Żubrówkа украшен рельефным изображением зубра. Ведь безудержная энергия и мощь беловежских великанов отражают дух бренда, который веками чтит свои традиции, создавая уникальные настойки только из отборных экологически чистых составляющих.

Попробуйте также Некислое лето с Soplica: рецепты освежающих коктейлей и розыгрыш призов от украинских блогеров


Настойки Żubrówka / Фото Żubrówka ​

Уникальный мягкий вкус Żubrówka в сочетании с вековыми традициями превратили ее в легендарный бренд с особым характером. Каждый глоток Żubrówka открывает манящий аромат душистых трав с нежными финальными нотками и приятным послевкусием.

В каждую бутылку настоек Żubrówka вручную вкладывают стебель знаменитой травы зубровки, которая растет на солнечных полянах Беловежской Пущи.

Эхо поколений

Увлекательная история Żubrówka началась более 500 лет назад, когда польские алхимики начали активно применять дистилляцию – с ее помощью готовили лечебные настойки на травах, которые высоко ценились среди польской знати.

Ремесло развивалось, и настойки на основе травяных эссенций становились все популярнее. Впоследствии их изготовление превратилось в самостоятельное производство. Как сборник рецептов для приготовления настоек использовали книгу польского ботаника Стефана Фалимижа «О травах и их свойствах», которая была напечатана в 1534 году в Кракове.


Żubrówka имеет историю более 500 лет / Фото Shutterstock

В ней содержалось более 70 рецептов и детальных описаний процесса дистилляции. Также в книге можно было найти описание разнообразных трав, которые росли в Беловежской Пуще. Это старинный лесной массив, расположенный на границе Польши и Беларуси.


Беловежская Пуща / Фото Żubrówka

Здесь собирали уникальную душистую траву – зубровку, ведь она славилась своими целебными свойствами. Поговаривали, что именно это растение было источником могущества и незаурядной силы диких зубров, которые жили на территории пралеса.

Настойка на ее основе пришлась по душе и простым горожанам, и тамошним аристократам. Впоследствии ее назвали Żubrówka, первое упоминание о которой датируется 1894 годом.

Уже в 1953 году был создан официальный рецепт настойки, разработанный польским специалистом Яном Дубински. С тех пор и началось массовое производство Żubrówka, уникальный вкус и аромат которой покорил потребителей не только в пределах страны, но и по всему миру.

Не пропустите Где лето, там Zubrowka: ивент-Арена «Морвокзал» приглашает на концерты под открытым небом

Создание легенды

Создание Żubrówka начинается со сбора редкой травы зубровки в Беловежской Пуще. Это единственный природный объект в Польше, который находится под защитой ЮНЕСКО.


Сбор травы зубровки / Фото Żubrówka

Собирают зубровку для Żubrówka Bison Grass семьями дважды в год. Лишь 20 семей сборщиков знают, где именно растет это уникальное растение. Заметив его среди других трав, они осторожно срезают стебель, чтобы сохранить цвет растения.

Также здесь, в Беловежской Пуще, собирают необходимые травы и ягоды, из которых изготавливают натуральные эссенции:

  • кору дуба с поваленных великанов для Żubrówka Złota;
  • лесные ягоды для Żubrówka Rose;
  • безупречно чистую родниковую воду для Żubrówka Biała.


Разновидности Żubrówka / Фото Żubrówka ​

Готовую траву и другие составляющие отправляют на современный ликеро-водочный завод CEDC International в городе Белосток (Польша), который граничит с Беловежской Пущей.

Именно там изготавливают напитки Żubrówka из натуральных чистых эссенций, которые получают из уникального экстракта травы зубровки, а также из отборных плодов и пряностей.

Уникальный процесс создания одной бутылки Żubrówka составляет около 2 месяцев.

Стоит знать Оригинал против подделки: на что обращать внимание при покупке алкоголя

Из лучших пшеничных сортов на заводе изготавливают высококачественный спирт, который проходит шесть этапов очистки через угольные фильтры.

Тогда спирт вместе с артезианской водой добавляют к ароматным эссенциям. Полученный напиток заливают в дубовые бочки и оставляют на некоторое время, чтобы напиток насытился нежными ванильными нотками.


Żubrówka хранят в дубовых бочках / Фото Żubrówka

После этого напиток фильтруют до получения нужного цвета и исключительного мягкого вкуса. Специальная комиссия дегустирует напиток, оценивая его запах, цвет, вкус и прозрачность.


Изготавливают Żubrówka по европейским стандартам / Фото Żubrówka

В конце в каждую бутылку вручную вкладывают один стебель зубровки – как подтверждение естественности продукта, а затем происходит процесс разлива.

Наконец, готовая Żubrówka отправляется на полки магазинов по всему миру.


Żubrówka – бренд, известный во всем мире / Фото Żubrówka

Вкус и аромат напитков Żubrówka неоднократно отмечали на престижных международных конкурсах, среди которых The Spirits Business Vodka Masters, The International Wine & Spirits Competition и другие.


Награды Żubrówka / Фото Żubrówka ​

В 2020 году Żubrówka Bison Grass завоевала золото и титул The Vodka Master по результатам конкурса The Spirits Business Vodka Masters.

Узнавайте больше Новые награды Zubrowka: история успеха самого титулованного алкогольного бренда

Żubrówka – один из тех напитков, который невозможно спутать ни с одним другим. Ведь открывая бутылку Żubrówka, мы общаемся с многовековой польской традицией.

Богатый опыт и преданность собственным идеалам, деликатный способ сбора с заботой об окружающей среде, использование лучших природных компонентов и соблюдение европейских стандартов производства делает Żubrówka легендарным напитком, который не имеет аналогов на мировом алкогольном рынке.

Zubrowka – это бренд, который лелеет свою историю. Благодаря этому каждый может насладиться неповторимым вкусом напитка, который остается неизменным от поколения к поколению.

Откройте для себя уникальный вкус и нежный аромат напитков Żubrówka, в которых живет первозданный дух дикой природы.

Чтобы узнать больше информации об актуальных разновидностях Żubrówka, которые представлены на рынке Украины, переходите по ссылке zubrowka.ua.

Как проверить, является ли массив JavaScript пустым или нет с .length

При программировании на JavaScript вам может потребоваться знать, как проверить, пуст ли массив или нет.

Чтобы проверить, пуст массив или нет, вы можете использовать свойство .length.

Свойство length устанавливает или возвращает количество элементов в массиве. Зная количество элементов в массиве, вы можете определить, пуст он или нет. В пустом массиве будет 0 элементов.

Давайте рассмотрим несколько примеров.

.length Пример синтаксиса

  Const myArray = [«Лошади», «Собаки», «Кошки»];  

Здесь мы создаем переменную, указывающую на пустой массив.

Используя свойство length, мы можем проверить длину массива:

  myArray.length  

Это вернет 3, потому что в массиве 3 элемента.

Чтобы проверить, является ли массив пустым или нет с .length, мы можем сделать это тремя способами.

.length example one

Во-первых, давайте создадим новый массив без элементов.

  const arr = []  

Теперь мы можем проверить, пуст ли массив, используя .length .

  arr.length  

Это вернет 0, поскольку в массиве 0 элементов.

.length, пример два

Мы также можем явно проверить, является ли массив пустым или нет.

if (arr.length === 0) {console.log («Массив пуст!»)}

Если наш массив пуст, приведенное выше сообщение будет зарегистрировано.Если в массиве есть элементы, код в блоке if не запустится.

Вот третий способ проверить, пуст ли массив, используя .length.

.length, пример три

Благодаря сочетанию использования свойства length и логического оператора «not» в JavaScript, символ «!» символ, мы можем проверить, пуст ли массив или нет.

! Оператор отменяет выражение. То есть мы можем использовать его для возврата истинного , если массив пуст.

Для этого примера давайте откроем нашу консоль JavaScript. Чтобы открыть консоль в Chrome, вы можете нажать Inpsect -> Console.

Сначала создайте массив без элементов.

Затем давайте воспользуемся логическим оператором «not» вместе с нашим свойством .length, чтобы проверить, является ли массив пустым или нет.

Если бы мы не использовали оператор «not», arr.length вернул бы 0 . С добавленным оператором он вернет true , если его операнд false .Поскольку arr.length равно 0 или false, он возвращает true .

Давайте используем это с оператором if и распечатаем сообщение, если наш массив пуст.

При проверке, является ли массив пустым, часто лучше также проверить, действительно ли массив является массивом.

Почему?

Потому что может быть случай, когда вы ожидаете проверить длину массива, но вместо этого вам предоставляется другой тип данных, например, строка:

Поскольку свойство длины может использоваться для других типов данных, хорошо также проверить, действительно ли ваш массив является массивом, как вы и ожидали.

Я предлагаю вам также использовать метод Array.isArray () , чтобы подтвердить, что ваш массив является массивом. Этот метод определяет, является ли то, что было передано, массивом или нет. Если переданный массив был массивом, этот метод вернет true .

Добавим этот метод в наш пример.

Как использовать метод Array.isArray ()

Завершение

В этой статье мы узнали, что вы можете использовать свойство length в JavaScript различными способами, чтобы проверить, пуст ли массив или нет.Свойство length возвращает количество элементов в массиве.

Мы также узнали, что лучше всего также использовать метод Array.isArray при использовании свойства .length , чтобы проверить, является ли переданное значение массивом, как вы ожидаете.

3 способа очистить массив в JavaScript

Массивы предназначены для разработчиков JavaScript, например, как шурупы и гвозди для плотников. Следовательно, важно знать, как это работает.Очистка массива — одна из важных концепций, поэтому вот несколько известных мне методов.

1) Использование свойства длины

Свойство длины возвращает количество элементов в этом массиве. И если мы приравняем это к 0 , мы сможем очистить элементы массива. Этот метод довольно популярен, но не самый быстрый.

  baratheon = ["Роберт", "Ренли", "Станнис"]
baratheon.length = 0 // очищает массив

приставка.log (baratheon) // ожидаемый результат: []
console.log (baratheon.length) // ожидаемый результат: 0
  
Войти в полноэкранный режимВыйти из полноэкранного режима

2) Назначение его новому пустому массиву

Это самый быстрый способ очистки массива. Это идеально, если у вас нет ссылок из других мест на оригинал обр. В противном случае эти ссылки не будут обновлены, и в этих местах по-прежнему будет использоваться старый массив.

  baratheon = ["Роберт", "Ренли", "Станнис"]
baratheon = [] // очищаем массив

приставка.log (baratheon.length) // ожидаемый результат: 0
console.log (baratheon) // ожидаемый результат: []
  
Войти в полноэкранный режимВыйти из полноэкранного режима

3) Использование метода массива splice ()

Это можно сделать с помощью метода splice () из списка методов массива JavaScript. Метод splice () принимает индекс (с которого должно начинаться сращивание) и количество элементов, которые нужно удалить, в качестве параметров и соединяет элементы.
Мы должны передать 0 как индекс (первый элемент) и длину массива как параметры, в результате чего весь массив опустошается. Производительность этого метода почти такая же, как при назначении нового метода массива.

  baratheon = ["Роберт", "Ренли", "Станнис"]
baratheon.splice (0, baratheon.length) // очищает массив

console.log (baratheon.length) // ожидаемый результат: 0
console.log (baratheon) // ожидаемый результат: []
  
Войти в полноэкранный режимВыйти из полноэкранного режима

И это подводит итог.Прокомментируйте ниже, если вы знаете какие-либо другие способы очистить массив.

Спасибо 🙂

Очистка массива с помощью JavaScript

Очистка массива - обычная задача JavaScript, но я слишком часто вижу, что задача выполняется неправильно. Много раз разработчики будут создавать новый массив:

myArray = []; // Плохо
 

Это не лучший способ получить новый массив; чтобы усечь массив и, таким образом, очистить его, вы должны установить свойство length равным нулю:

myArray.длина = 0; // хорошо!
 

Установка длины, равной нулю, очищает существующий массив, не создавая другой массив! Это также помогает избежать проблем с указателями в массивах. С новым методом массива выше:

// ... как указано Дагом в комментариях
A = [1,2,3,4,5]
В = А
A = []
console.log (B) // [1,2,3,4,5]
 

Усечение длины сделало бы как A , так и B исходным массивом, но пустым!

  • fetch API

    Один из худших секретов AJAX в сети заключается в том, что базовый API для него, XMLHttpRequest , на самом деле не был создан для того, для чего мы его использовали.Мы хорошо поработали, создав элегантные API-интерфейсы вокруг XHR, но мы знаем, что можем добиться большего. Наши усилия по ...

  • Любимые демо-версии CodePen Криса Койера

    Дэвид спросил меня, не хочу ли я принять участие в гостевом посте, в котором я выберу несколько моих любимых ручек с CodePen. Непростая задача! Существует так много! Мне удалось выбрать несколько, которые поразили меня за последние несколько месяцев. Если вы ...

  • Любимые демонстрации CodePen Джека Ругила

    CodePen - потрясающий источник вдохновения для кода и дизайна.Я каждый день поражаюсь демонстрациям, которые создают пользователи. Как вы увидите ниже, мне нравятся движущиеся вещи. Трудно было сузить список моих фаворитов, но вот они!

  • CSS @supports

    Обнаружение функций с помощью JavaScript является передовой практикой на стороне клиента и по всем правильным причинам, но, к сожалению, та же функциональность недоступна в CSS. В итоге мы повторяем одни и те же свойства несколько раз с каждым префиксом браузера.Фу. Другое дело, что мы ...

7 способов удаления дубликатов из массива в JavaScript | автор: Jayanth babu

Фотография Skye Studios на Unsplash

Это частый случай использования во многих проектах, когда необходимо удалить дубликаты из массива в JavaScript. Что касается собеседований, это обычная задача по программированию, которую каждый должен практиковать.

Вот семь способов отфильтровать дубликаты из массива и вернуть только уникальные значения.

Использование метода filter

Метод filter создает новый массив элементов, которые передают предоставленное нами условие.И любой элемент, который не работает или возвращает false , его не будет в отфильтрованном массиве.

Удаление повторяющихся элементов из массива в JavaScript

И мы также можем использовать метод фильтрации для извлечения повторяющихся значений из массива, просто изменив наше условие

С помощью набора

Наборы - это новый тип объекта с ES6 ( ES2015), который позволяет создавать коллекции уникальных ценностей.

Использование метода forEach

Используя forEach , мы можем перебирать элементы в массиве и вставлять в новый массив, если он не существует в массиве.

Используя метод уменьшения

Reduce всегда немного сложнее для понимания. Метод reduce используется для уменьшения элементов массива и объединения их в окончательный массив на основе некоторой переданной функции редуктора.

Тот же метод сокращения с другим подходом

Добавление уникального метода к прототипу массива

В Javascript конструктор прототипа массива позволяет добавлять новые свойства и методы к объекту массива .

Наборы будут работать намного быстрее по сравнению с обычным подходом.

Используя Underscore JS

_.uniq метод создает версию массива , без дубликатов, а также мы можем отсортировать этот массив, передав второй параметр true.

Удаление повторяющихся объектов из заданного массива

Иногда требуется удалить повторяющиеся объекты из массива объектов по имени свойства. Этого можно добиться:

Вот и все! Я надеюсь, что эта статья может быть полезна для удаления дубликатов из массива.

Спасибо за чтение 🙂

Как удалить дубликаты массива в ES6

Вот 3 способа отфильтровать дубликаты из массива и вернуть только уникальные значения. Я предпочитаю использовать Set, потому что он самый короткий и простой 😁

1. Использование

set

Позвольте мне начать с объяснения того, что такое Set:

Set - это новый объект данных, представленный в ES6. Потому что Set позволяет хранить только уникальные значения. Когда вы передаете массив, он удаляет все повторяющиеся значения.

Хорошо, давайте вернемся к нашему коду и разберемся, что происходит. Происходит 2 вещи:

  1. Во-первых, мы создаем новый набор Set , передавая массив. Поскольку Set допускает только уникальные значения, все дубликаты будут удалены.
  2. Теперь дубликаты исчезли, мы собираемся преобразовать их обратно в массив с помощью оператора распространения ...

Преобразовать

Set в массив, используя массив . также можно использовать массив .from для преобразования набора Set в массив:

2: Использование фильтра

Чтобы понять этот вариант, давайте рассмотрим, что делают эти два метода: indexOf и filter

indexOf

Метод indexOf возвращает первый найденный индекс указанного элемента из нашего массива.

filter

Метод filter () создает новый массив элементов, которые передают предоставленное нами условие.Другими словами, если элемент проходит и возвращает true , он будет включен в отфильтрованный массив. И любой элемент, который не работает или возвращает false , он НЕ будет в отфильтрованном массиве.

Давайте перейдем к рассмотрению того, что происходит при просмотре массива.

Ниже приведен вывод журнала console.log, показанный выше. В дубликатах индекс не соответствует indexOf. Таким образом, в этих случаях условие будет ложным и не будет включено в наш отфильтрованный массив.

Позиция Индекс indexOf Состояние
🐑 0 0 true 9039 9039 9039 9039 9039 9039 9039 9039 9039 9039 9039 9039 9039 9039 9039 9039 9039 9039 9039 9039 9039 9039
2 2 2 истина
🐑 3 0 ложь
ложь 5 5 true

Извлечь повторяющиеся значения

Мы также можем использовать метод фильтрации для извлечения повторяющихся значений из массива.Мы можем сделать это, просто изменив наше условие следующим образом:

Опять же, позвольте пройти через это и увидеть результат:

Item Index indexOf Condition
🐑 0 0 ложный
1 1 1 ложный
2 2 2 ложный
🐑391 ложный
🐑391 1
🐑 4 0 true
3 5 5 false

0 используемый метод уменьшить

чтобы уменьшить элементы массива и объединить их в окончательный массив на основе переданной вами функции редуктора.

В этом случае наша функция редуктора проверяет, содержит ли наш последний массив элемент. Если это не так, поместите этот элемент в наш последний массив. В противном случае пропустите этот элемент и верните только наш последний массив как есть (по сути, пропуская этот элемент).

Reduce всегда немного сложнее для понимания, поэтому давайте также рассмотрим каждый случай и посмотрим на результат:

А вот вывод из console.log:

‘]
Item Accumulator (BEFORE Reducer Function) Нажать на аккумулятор? Аккумулятор (ПОСЛЕ функции редуктора)
🐑 [] Да ['🐑']
1 9392 9392 Да ['🐑', 1]
2 ['🐑', 1] Да ['🐑0008 90, 2] 9
🐑 ['🐑', 1, 2] ['🐑', 1, 2]
🐑 ['🐑', 1, 2] Нет ['🐑', 1, 2]
3 ['🐑', 1, 2] Да , 1 2, 3]
  • @smokkku: массив. 2)

Ресурсы

.пустой () | Документация по jQuery API

Этот метод удаляет не только дочерние (и другие потомки) элементы, но также и любой текст в наборе совпадающих элементов. Это связано с тем, что в соответствии со спецификацией DOM любая строка текста внутри элемента считается дочерним узлом этого элемента. Рассмотрим следующий HTML-код:

1

2

3

4

 

Привет

До свидания

Мы можем выбрать любой элемент для удаления:

Это приведет к созданию структуры DOM с удаленным текстом Hello :

1

2

3

4

 

До свидания

Если бы у нас было любое количество вложенных элементов внутри

, они бы тоже были удалены.

Чтобы избежать утечки памяти, jQuery удаляет другие конструкции, такие как данные и обработчики событий, из дочерних элементов перед удалением самих элементов.

Если вы хотите удалить элементы, не разрушая их данные или обработчики событий (чтобы их можно было повторно добавить позже), используйте вместо этого .detach () .

Пример:

Удаляет все дочерние узлы (включая текстовые узлы) из всех абзацев

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

 

пустая демонстрация

Здравствуйте, Человек и человек .

$ ("кнопка") .click (function () {

Демо:

Удаление элемента из массива в Python

Введение

В этом руководстве будут рассмотрены некоторые распространенные способы удаления элементов из массивов Python.Вот список всех техник и методов, которые мы рассмотрим в этой статье:

Массивы в Python

Массивы и списки - это не одно и то же в Python. Хотя списки используются чаще, чем массивы, у последних все же есть свои варианты использования. Основное различие между ними заключается в том, что списки могут использоваться для хранения произвольных значений. Они также разнородны, что означает, что они могут одновременно хранить целые числа, строки, другие объекты и т. Д.

Массивы, с другой стороны, похожи на массивы в C.Они представляют собой однородные структуры данных для хранения элементов одного типа , и они используют гораздо меньше памяти, чем списки.

В этом руководстве основное внимание будет уделено массивам , вместо списков , хотя большинство методов, показанных в этом руководстве, можно использовать для обеих этих двух структур данных.

Использование

remove ()

Соответственно, функция remove () может использоваться с любым массивом в Python. Чтобы использовать его, мы можем просто передать значение элемента, который хотим удалить.Представим, что у нас есть следующий массив:

  массив = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
  

Чтобы удалить, скажем, элемент 40 , мы просто напишем:

  массив. Удалить (40)
  

Результат - тот же массив без значения 40 :

  [10, 20, 30, 50, 60, 70, 80, 90, 100]
  

Использование

pop ()

Функция pop () принимает индекс элемента, который мы хотим удалить.Если бы у нас был тот же массив, что и раньше (со значениями от 10 до 100), мы могли бы написать что-то вроде следующего:

  индекс = 3
array.pop (индекс)
  

Если бы мы напечатали результат метода pop, это было бы значение 40 :

  [10, 20, 30, 50, 60, 70, 80, 90, 100]
  

Аналогично тому, как pop () работает в структуре данных стека, здесь pop () также возвращает только что удаленное значение.

Единственная разница в том, что с массивами мы можем удалить произвольный элемент.Со стеками можно удалить только верхний элемент (то есть последний добавленный).

Использование

del

del - ключевое слово python, используемое для удаления объектов. Его точное поведение меняется в зависимости от контекста, поэтому мы также можем использовать его для удаления элементов массива. Еще раз возьмем тот же массив и индекс, что и раньше:

  массив = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
index = 3
  

Чтобы удалить элемент с индексом 3 , мы просто набираем следующее:

  del array [индекс]
  

Если бы мы теперь распечатали содержимое нашего массива, мы бы получили следующий результат:

  [10, 20, 30, 50, 60, 70, 80, 90, 100]
  

Использование

numpy Массивы Массивы

NumPy технически также являются массивами, и, поскольку они широко используются (особенно в машинном обучении), давайте покажем один из способов удаления элемента из массива numpy .Перед использованием numpy необходимо импортировать его с

  импортировать numpy как np
  

Чтобы создать массив numpy , мы можем обернуть наш текущий массив, используя np.array () как таковой:

  a = np.array (массив)
  

В качестве альтернативы мы могли бы также объявить новый массив внутри самого вызова метода:

  a = np.array ([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
  

Теперь, чтобы удалить элемент с индексом 3 , мы используем следующий код:

  • Возврат средств без вопросов в течение 30 дней
  • От начального до продвинутого
  • Регулярно обновляется (обновление июнь 2021 г.)
  • Новые бонусные ресурсы и руководства
  index = 3
а = нп.удалить (а, индекс)
  

delete () - статический метод, объявленный в модуле numpy . Он принимает массив и индекс удаляемого элемента.

Метод возвращает новый массив без удаленного элемента:

  [10, 20, 30, 50, 60, 70, 80, 90, 100]
  

Заключение

Есть разные способы удалить элемент массива в Python. Иногда нам может понадобиться удалить элемент по индексу, а иногда по значению.Иногда мы используем массив Python по умолчанию, а иногда массив numpy .

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

.