Array.prototype.splice()

Array Methods

Method Description
concat() Joins two or more arrays, and returns a copy of the joined arrays
copyWithin() Copies array elements within the array, to and from specified positions
entries() Returns a key/value pair Array Iteration Object
every() Checks if every element in an array pass a test
fill() Fill the elements in an array with a static value
filter() Creates a new array with every element in an array that pass a test
find() Returns the value of the first element in an array that pass a test
findIndex() Returns the index of the first element in an array that pass a test
forEach() Calls a function for each array element
from() Creates an array from an object
includes() Check if an array contains the specified element
indexOf() Search the array for an element and returns its position
isArray() Checks whether an object is an array
join() Joins all elements of an array into a string
keys() Returns a Array Iteration Object, containing the keys of the original array
lastIndexOf() Search the array for an element, starting at the end, and returns its position
map() Creates a new array with the result of calling a function for each array element
pop() Removes the last element of an array, and returns that element
push() Adds new elements to the end of an array, and returns the new length
reduce() Reduce the values of an array to a single value (going left-to-right)
reduceRight() Reduce the values of an array to a single value (going right-to-left)
reverse() Reverses the order of the elements in an array
shift() Removes the first element of an array, and returns that element
slice() Selects a part of an array, and returns the new array
some() Checks if any of the elements in an array pass a test
sort() Sorts the elements of an array
splice() Adds/Removes elements from an array
toString() Converts an array to a string, and returns the result
unshift() Adds new elements to the beginning of an array, and returns the new length
valueOf() Returns the primitive value of an array

❮ Previous
Next ❯

Ассоциативные массивы

Многие языки программирования поддерживают массивы с именованными индексами.

Массивы с именованными индексами называются ассоциативными массивами (или хэшами).

JavaScript не поддерживает массивы с именованными индексами.

В JavaScript массивы всегда используют пронумерованные индексы.

Пример

var person = [];
person = «John»;
person = «Doe»;
person = 46;var x = person.length;        
// person.length will return 3var y = person;            
// person will return «John»

Предупреждение!!При использовании именованных индексов JavaScript будет переопределять массив в стандартный объект.После этого некоторые методы и свойства массива будут давать неверные результаты.

Пример:

var person = [];
person = «John»;
person = «Doe»;
person = 46;var x = person.length;         // person.length will
return 0var y = person;            
// person will return undefined

Методы pop/push, shift/unshift

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

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

Массивы поддерживают обе операции.

На практике необходимость в этом возникает очень часто. Например, очередь сообщений, которые надо показать на экране.

Существует и другой вариант применения для массивов – структура данных, называемая стек.

Она поддерживает два вида операций:

  • добавляет элемент в конец.
  • удаляет последний элемент.

Таким образом, новые элементы всегда добавляются или удаляются из «конца».

Примером стека обычно служит колода карт: новые карты кладутся наверх и берутся тоже сверху:

Массивы в JavaScript могут работать и как очередь, и как стек. Мы можем добавлять/удалять элементы как в начало, так и в конец массива.

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

Методы, работающие с концом массива:

Удаляет последний элемент из массива и возвращает его:

Добавляет элемент в конец массива:

Вызов равнозначен .

Методы, работающие с началом массива:

Удаляет из массива первый элемент и возвращает его:

Добавляет элемент в начало массива:

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

Дополнительные методы

1. Получение первого элемента массива

Пример:

2. Получение последнего элемента массива

Пример:

3. Создание копии массива

Пример:

4. Получение длины массива (количество элементов массива)

Пример:

5. Метод splice() предназначен для изменения содержимого массива. Первый параметр отвечает за количество элементов в массиве, от начала которых нужно отступить. Второй параметр указывает на количество элементов для удаления. Третий параметр используется в случае, когда требуется добавить значение для нового элемента.

Пример:

6. Метод сортировки массивов

Пример:

7. Метод изменения порядка элементов на обратный

Пример:

8. Метод concat() создает новый массив на основе переданных значений и предыдущего массива.

Пример:

9. Метод flat() создаст новый массив на основе вложенных массивов. В параметре метода можно указать число вложений, которые требуется преобразовать в «плоский» массив.

Пример:

Loops

One of the oldest ways to cycle array items is the loop over indexes:

But for arrays there is another form of loop, :

The doesn’t give access to the number of the current element, just its value, but in most cases that’s enough. And it’s shorter.

Technically, because arrays are objects, it is also possible to use :

But that’s actually a bad idea. There are potential problems with it:

  1. The loop iterates over all properties, not only the numeric ones.

    There are so-called “array-like” objects in the browser and in other environments, that look like arrays. That is, they have and indexes properties, but they may also have other non-numeric properties and methods, which we usually don’t need. The loop will list them though. So if we need to work with array-like objects, then these “extra” properties can become a problem.

  2. The loop is optimized for generic objects, not arrays, and thus is 10-100 times slower. Of course, it’s still very fast. The speedup may only matter in bottlenecks. But still we should be aware of the difference.

Generally, we shouldn’t use for arrays.

Создание объектов

Объекты можно создать методом наполнения, то есть сначала объект создаётся пустым, а затем наполняется ключами и значениями

var item1 = {};
item1.id = '1';
item1.name = 'Туалетная бумага';
item1.price = '17.00';
item1.quantity = 3;
item1.hq = true;

var item2 = {};
item2.id = '2';
item2.name = 'Полотенце';
item2.price = '85.50';
item2.quantity = 1;
item2.dopinfo = ;
item2.hq = false;

var item3 = {};
item3.id = '3';
item3.name = 'Бумажные салфетки';
item3.price = '23.66';
item3.quantity = 2;
item3.hq = false;

Ещё один способ создания объектов — сразу задавать ему ключи со значениями

var item4 = {
    'id': '4',
    'name': 'Верёвка',
    'price': '7.00',
    'quantity': 1,
    'hq': true,
};

Аналогично можно создать и массив, сначала пустой:

var purchase = [];

а затем наполнить его объектами методом push

purchase.push(item1, item2, item3);

Также, методом push можно добавить объект в уже наполненный массив:

purchase.push(item4);

Это будет аналогично

purchase.push(item1, item2, item3, item4);

Метод push отправляет данные или объекты в конец массива.

Свойства объектов также могут содержать в себе массивы, и объекты в них. Как, например, в объекте item2 — свойство item2.dopinfo

С помощью метода unshift можно добавить данные или объекты в начало массива:

purchase.unshift({id: "5", name: "Носки", price: "28.00", quantity: 7, 'hq': true});

Эта строчка добавить данные по носкам в начало массива

Для извлечения объекта с начала или с конца массива используются методы shift и pop соответственно.

Избегайте нового массива ()

Нет необходимости использовать встроенный конструктор массива в JavaScript Новый массив ().

Вместо этого используйте [].

Эти две различные инструкции создают новый пустой массив с именем Points:

var points = new Array();        
// Bad
var points = [];                 
// Good 

Эти две различные инструкции создают новый массив, содержащий 6 чисел:

var points = new Array(40, 100, 1, 5, 25, 10); // Bad
var points = ;          // Good

Ключевое слово New усложняет только код. Он также может привести к неожиданным результатам:

var points = new Array(40, 100);  // Creates an array with two elements (40 and 100)

Что делать, если удалить один из элементов?

var points = new Array(40);       // Creates an array with 40 undefined elements !!!!!

Как создать строку из массива

Могут быть ситуации, когда вы просто хотите создать строку, объединив элементы массива. Для этого вы можете использовать метод join(). Этот метод принимает необязательный параметр, который является строкой-разделителем, которая добавляется между каждым элементом. Если вы опустите разделитель, то JavaScript будет использовать запятую (,) по умолчанию. В следующем примере показано, как это работает:

var colors = ;

document.write(colors.join()); // Результат: Red,Green,Blue
document.write(colors.join("")); // Результат: RedGreenBlue
document.write(colors.join("-")); // Результат: Red-Green-Blue
document.write(colors.join(", ")); // Результат: Red, Green, Blue

Вы также можете преобразовать массив в строку через запятую, используя toString(). Этот метод не принимает параметр разделителя, как это делает join(). Пример работы метода toString():

var colors = ;
document.write(colors.toString()); // Результат: Red,Green,Blue

Declaration

There are two syntaxes for creating an empty array:

Almost all the time, the second syntax is used. We can supply initial elements in the brackets:

Array elements are numbered, starting with zero.

We can get an element by its number in square brackets:

We can replace an element:

…Or add a new one to the array:

The total count of the elements in the array is its :

We can also use to show the whole array.

An array can store elements of any type.

For instance:

Trailing comma

An array, just like an object, may end with a comma:

The “trailing comma” style makes it easier to insert/remove items, because all lines become alike.

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

Методы pop() и shift()

Методы pop() и shift() удаляют последний и первый элемент массива, соответственно:

var myArray = ;
myArray.pop(); // Удаляет элемент "Кейт"
myArray.shift(); // Удаляет элемент "Джек"
console.log(myArray); // Выводит 

Метод splice()

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

В следующем примере метод splice() добавляет два элемента, начиная с индекса 2 (то есть с третьего элемента):

var fruitArray = ;
fruitArray.splice(2, 0, "дыня", "банан");
console.log(fruitArray); // Выводит 

Первый параметр метода splice() — индекс. Он указывает, на какой позиции нужно добавить/удалить элементы. В нашем примере мы выбрали индекс 2 (со значением «апельсин»).

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

Следующие параметры — необязательные. Они добавляют в массив новые значения. В нашем случае нужно добавить «дыню» и «банан», начиная с индекса 2.

Чтобы удалить один элемент массива js на индексе 2, нужен следующий код:

var fruitArray = ;
fruitArray.splice(2,1);
console.log(fruitArray); // Prints 

Стоит также сказать о методе slice(), который тоже удаляет значения из массива, но не изменяет оригинальный массив, а возвращает новый.

Работа с массивами JS — метод slice

Можно извлечь часть массива с помощью метода slice(begin):
var arr = ;
var arr2 = arr.slice(0,2) // принимает 2 элемента, начиная с 0
alert(arr2.join(', ')) // "Why, learn"

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

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

var arr = ;
var arr2 = arr.slice(1) // принимает все элементы, начиная с 1
alert(arr2.join(', ')) // "learn, JavaScript"

Метод поддерживает отрицательные индексы, так же, как String#slice.

Как добавить новые элементы в массив

Чтобы добавить новый элемент в конец массива, просто используйте метод push(), например:

var colors = ; 
colors.push("Yellow");

document.write(colors); // Результат: Red,Green,Blue,Yellow
document.write(colors.length); // Результат: 4

Точно так же, чтобы добавить новый элемент в начале массива, используйте метод unshift(), например:

var colors = ; 
colors.unshift("Yellow");

document.write(colors); // Результат: Yellow,Red,Green,Blue
document.write(colors.length); // Результат: 4

Так же, вы можете добавить несколько элементов в начало или конец массива. Для этого, разделите значения запятыми передавая их методам push() или unshift().

Methods pop/push, shift/unshift

A queue is one of the most common uses of an array. In computer science, this means an ordered collection of elements which supports two operations:

  • appends an element to the end.
  • get an element from the beginning, advancing the queue, so that the 2nd element becomes the 1st.

Arrays support both operations.

In practice we need it very often. For example, a queue of messages that need to be shown on-screen.

There’s another use case for arrays – the data structure named stack.

It supports two operations:

  • adds an element to the end.
  • takes an element from the end.

So new elements are added or taken always from the “end”.

A stack is usually illustrated as a pack of cards: new cards are added to the top or taken from the top:

For stacks, the latest pushed item is received first, that’s also called LIFO (Last-In-First-Out) principle. For queues, we have FIFO (First-In-First-Out).

Arrays in JavaScript can work both as a queue and as a stack. They allow you to add/remove elements both to/from the beginning or the end.

In computer science the data structure that allows this, is called deque.

Methods that work with the end of the array:

Extracts the last element of the array and returns it:

Append the element to the end of the array:

The call is equal to .

Methods that work with the beginning of the array:

Extracts the first element of the array and returns it:

Add the element to the beginning of the array:

Methods and can add multiple elements at once:

Add/remove items

We already know methods that add and remove items from the beginning or the end:

  • – adds items to the end,
  • – extracts an item from the end,
  • – extracts an item from the beginning,
  • – adds items to the beginning.

Here are a few others.

How to delete an element from the array?

The arrays are objects, so we can try to use :

The element was removed, but the array still has 3 elements, we can see that .

That’s natural, because removes a value by the . It’s all it does. Fine for objects. But for arrays we usually want the rest of elements to shift and occupy the freed place. We expect to have a shorter array now.

So, special methods should be used.

The arr.splice method is a swiss army knife for arrays. It can do everything: insert, remove and replace elements.

The syntax is:

It modifies starting from the index : removes elements and then inserts at their place. Returns the array of removed elements.

This method is easy to grasp by examples.

Let’s start with the deletion:

Easy, right? Starting from the index it removed element.

In the next example we remove 3 elements and replace them with the other two:

Here we can see that returns the array of removed elements:

The method is also able to insert the elements without any removals. For that we need to set to :

Negative indexes allowed

Here and in other array methods, negative indexes are allowed. They specify the position from the end of the array, like here:

The method arr.slice is much simpler than similar-looking .

The syntax is:

It returns a new array copying to it all items from index to (not including ). Both and can be negative, in that case position from array end is assumed.

It’s similar to a string method , but instead of substrings it makes subarrays.

For instance:

We can also call it without arguments: creates a copy of . That’s often used to obtain a copy for further transformations that should not affect the original array.

The method arr.concat creates a new array that includes values from other arrays and additional items.

The syntax is:

It accepts any number of arguments – either arrays or values.

The result is a new array containing items from , then , etc.

If an argument is an array, then all its elements are copied. Otherwise, the argument itself is copied.

For instance:

Normally, it only copies elements from arrays. Other objects, even if they look like arrays, are added as a whole:

…But if an array-like object has a special property, then it’s treated as an array by : its elements are added instead:

Переменная, ее значение и место в алгоритме

Расстояние между переменной и массивом ничтожно на линии развития программирования.

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

Когда властвовал Фортран и Бэйсик, об объектах еще даже не мечтали, а классический синтаксис оператора — это была отдельная строчка кода.Только в исключительных случаях можно было писать в одной строчке пару операторов.

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

Понятие «отката» — прерогатива прикладных программ

Операционные системы и языки программирования никогда не брали во внимание целесообразность и важность истории действий (событий) и право программиста/пользователя на их отмену

До сих пор понятие истории действий и возможности движения по ней (undo и redo) не признается «ведущими» авторитетами переднего края информационных технологий, но насколько это хорошо и правильно?

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

  • естественное право человека (как программиста, так и пользователя);
  • объективная функциональность любого приложения, любой части программного кода.

Пора понять и признать это изготовителям операционных систем и инструментальных средств программирования.

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

Avoid new Array()

There is no need to use the JavaScript’s built-in array constructor Array().

Use instead.

These two different statements both create a new empty array named points:

var points = new Array();     // Bad
var points = [];              // Good 

These two different statements both create a new array containing 6 numbers:

var points = new Array(40, 100, 1, 5, 25, 10); // Bad
var points = ;          // Good

The keyword only complicates the code. It can also
produce some unexpected results:

var points = new Array(40, 100);  // Creates an array with two elements (40 and 100)

What if I remove one of the elements?

var points = new Array(40);  // Creates an array with 40 undefined elements !!!!!

Методы TypedArray

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

Мы можем обходить их, вызывать , , , и т.д.

Однако, есть некоторые вещи, которые нельзя осуществить:

  • Нет метода – мы не можем удалять значения, потому что типизированные массивы – это всего лишь представления данных из буфера, а буфер – это непрерывная область памяти фиксированной длины. Мы можем только записать 0 вместо значения.
  • Нет метода .

Но зато есть два дополнительных метода:

  • копирует все элементы из в , начиная с позиции (0 по умолчанию).
  • создаёт новое представление того же типа для данных, начиная с позиции до (не включая). Это похоже на метод (который также поддерживается), но при этом ничего не копируется – просто создаётся новое представление, чтобы совершать какие-то операции над указанными данными.

Эти методы позволяют нам копировать типизированные массивы, смешивать их, создавать новые на основе существующих и т.д.

Javascript: работа с массивами

Обращение или доступ к элементам массива в javaScript происходит так:

1
2
3
4
var mas=new Array(1,25,'Привет');
 
mas='Пока';
mas1=35;

При инициализации массива элемент mas был равен 1. Затем мы изменили его значение на ‘Пока’. Значение элемента массива mas было изменено с 25 на 35.

Вывод элементов массива

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

1
2
var mas=new Array(1,25,'Привет');
document.write(mas)

Результат:

1,25,Привет
  1. Рассмотрим, как осуществляется в javascript вывод массива с использованием обычного цикла :
1
2
3
4
5
6
7
var mas=new Array(1,25,'Привет');
 
function showElement(){
	for(i=;i<3;i++)
	  document.writeln(masi);
}
showElement();

Результат:

1 25 Привет

Использование цикла для перебора элементов массива:

1
2
3
4
5
6
7
8
var mas=new Array(1,25,'Привет');
 
function showElement(){
	for(var i in mas){
		document.writeln(masi);
	}
}
showElement();

Результат:

1 25 Привет

Задание array 5_1. Создать два массива: – с названием стран, и – с населением этих стран. Вывести название страны и ее население (использовать метод ).

Комментарии к выполнению:

  • Вывод элементов массива оформить в виде функции.
  • Сначала выполнить задание с помощью цикла , затем — с помощью цикла .

Задание array 5_2. Что выведет на экран следующий фрагмент кода?

 var e = 1024;
 var table = e, e + 1, e + 2, e + 3;
 document.write(table);

Пример: Что выведет на экран следующий фрагмент кода?

1
2
3
4
5
var arr = 1, 2, 3;
 arr5 = 5;
  for (var i = ; i < arr.length; i++) {
 document.write(arri + "<br />");
 }

В примере в строке происходит расширение массива – в 5-й индекс заносится значение . Цикл заполняет элементы типом , элементы которые мы не использовали — они остаются пустыми.
Удаление элементов массива

В javascript удалить элемент массива можно при помощи оператора :

1
2
3
var myColors = new Array("red", "green", "blue");
delete myColors1;
alert(myColors); // red,,blue

Задание array 5_3. Создать массив из трех элементов, значения элементов запрашивать у пользователя. Удалить второй по счету элемент, после чего вывести элементы массива на экран, каждый элемент с новой строки

Internals

An array is a special kind of object. The square brackets used to access a property actually come from the object syntax. That’s essentially the same as , where is the object, while numbers are used as keys.

They extend objects providing special methods to work with ordered collections of data and also the property. But at the core it’s still an object.

Remember, there are only eight basic data types in JavaScript (see the Data types chapter for more info). Array is an object and thus behaves like an object.

For instance, it is copied by reference:

…But what makes arrays really special is their internal representation. The engine tries to store its elements in the contiguous memory area, one after another, just as depicted on the illustrations in this chapter, and there are other optimizations as well, to make arrays work really fast.

But they all break if we quit working with an array as with an “ordered collection” and start working with it as if it were a regular object.

For instance, technically we can do this:

That’s possible, because arrays are objects at their base. We can add any properties to them.

But the engine will see that we’re working with the array as with a regular object. Array-specific optimizations are not suited for such cases and will be turned off, their benefits disappear.

The ways to misuse an array:

  • Add a non-numeric property like .
  • Make holes, like: add and then (and nothing between them).
  • Fill the array in the reverse order, like , and so on.

Please think of arrays as special structures to work with the ordered data. They provide special methods for that. Arrays are carefully tuned inside JavaScript engines to work with contiguous ordered data, please use them this way. And if you need arbitrary keys, chances are high that you actually require a regular object .

Работа с массивами JS — нечисловые ключи массива

Ключи — это числа, но они могут иметь любые имена:

arr = [] 
arr = 5
arr.prop = 10 // не делайте так

Но делать этого не рекомендуется. Числовые массивы подходят для числовых ключей, а JavaScript ассоциативный массив — для связанных пар ключ-значение. И смешивать их не стоит.

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

Например, push/pop работают только с крайними элементами массива, поэтому они невероятно быстры.

push работает только с концом:

var arr = 
arr.push("something")
alert(arr) // строка "array"

Методы shift/unshift медленные, потому что им нужно изменить нумерацию всего массива. Метод splice также может привести к изменению нумерации:

shift/unshiftpush/popJavaScript

Какой получится результат? Почему?

arr = 
arr.push( function() { alert(this) } )
arr()  // ?

Решение

Поскольку массивы являются объектами, arr<a href=»/..»>..</a> фактически является вызовом метода объекта, таким как obj<a href=»/method»>method</a>:

arr() 
// то же самое что
arr()
// синтаксически это неправильно, но концептуально то же самое:
arr.2() 
// переписанное в том же стиле, что и obj.method()
this = arr в таком случае передается функции, поэтому выводится содержимое arr.
arr = 

arr.push( function() { alert(this) } )

arr() // "a","b",функция

Склеивание ключей и значений из разных массивов в объект

Если ключи находятся в одном массиве, а значения — в другом, это всё можно «склеить» в один объект с помощью функции

var arrayOpt = ;
var arrayVal = ;

function data_combine(opt, val) {
    if(opt.length != val.length) return false;
    var combined = {};
    for (i=0; i<opt.length; i++) {
        combined] = val;
    }
    return combined;
}

var resultObject = data_combine(arrayOpt, arrayVal);

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

var resultArray = Array(data_combine(arrayOpt, arrayVal));

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

var a = ;
var b = ;
var r = a.reduce((o,c,i) => {o = o ? o + ", " + b:b; return o;}, {})

В данном примере в объекте массива r ключ options будет иметь одно значение a, b, c.

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

var arrayN = ;
var objN = arrayN.reduce(function(acc, cur, i) {
    acc = cur;
    return acc;
}, {});

Особенности описаний массивов и объектов

Реализация объектно-ориентированного программирования (ООП) в JavaScript — лучшая, на том простом основании, что это язык браузера всегда работает на реальных объектах. Несмотря на то, что реальными объектами являются объекты страницы, преобразованной в DOM, эти объекты управляются функционалом страницы и действиями посетителя. А это опыт JS и работа с массивами, как с реальными данными.

В приведенном примере заполнение переменной aSimple (на самом деле это массив) происходит только тремя операторами, и получается набор из трех значений: «Фортран», «Алгол» и «Basic». JS, как ассоциативные массивы, не интерпретирует описание переменной квадратными скобками.

Напротив, любая попытка использовать переменную иначе, чем описано фигурными скобками, обречена на провал. В описании объектов важны также используемые кавычки и кодировка. Если в перспективе массив или объект будут использованы в формате JSON, потребуется кодировка UTF-8 и только двойные кавычки.

Если к переменной применено описание «{ … }», значит, это динамический массив с текстовыми ключами, возможно, полноценный объект с методами и собственной структурой данных.

Добавить комментарий

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

Adblock
detector