Как проверить, содержит ли массив объект в JavaScript?
2258523 просмотра
30 ответа
Какой самый краткий и эффективный способ выяснить, содержит ли массив JavaScript объект?
Это единственный способ, которым я знаю, чтобы сделать это:
function contains(a, obj) {
for (var i = 0; i < a.length; i++) {
if (a[i] === obj) {
return true;
}
}
return false;
}
Есть ли лучший и более краткий способ сделать это?
Это очень тесно связано с вопросом переполнения стека. Лучший способ найти элемент в массиве JavaScript? который обращается к поиску объектов в массиве, используя indexOf
.
Ответы (30)
3893 плюса
Текущие браузеры Array#includes
, которые делают именно это, широко поддерживаются и имеют полифил для старых браузеров.
> ['joe', 'jane', 'mary'].includes('jane');
true
Вы также можете использовать Array#indexOf
, что является менее прямым, но не требует Polyfills для устаревших браузеров.
JQuery предлагает $.inArray
, что функционально эквивалентно Array#indexOf
.
underscore.js , служебная библиотека JavaScript, предлагает _.contains(list, value)
псевдоним _.include(list, value)
, оба из которых используют indexOf для внутреннего использования, если передают массив JavaScript.
Некоторые другие платформы предлагают аналогичные методы:
- Инструментарий Dojo:
dojo.indexOf(array, value, [fromIndex, findLast])
- Прототип:
array.indexOf(value)
- MooTools:
array.indexOf(value)
- MochiKit:
findValue(array, value)
- MS Ajax:
array.indexOf(value)
- Ext:
Ext.Array.contains(array, value)
- Lodash:
_.includes(array, value, [from])
(_.contains
ранее 4.0.0) - ECMAScript 2016:
array.includes(value)
Обратите внимание, что некоторые платформы реализуют это как функцию, в то время как другие добавляют функцию к прототипу массива.
Автор: codeape Размещён: 24.09.2009 07:35374 плюса
Обновление: как @orip упоминает в комментариях, связанный тест был сделан в 2008 году, поэтому результаты могут быть неактуальными для современных браузеров. Тем не менее, вам, вероятно, понадобится это для поддержки не современных браузеров, и они, вероятно, с тех пор не обновлялись. Всегда проверяйте себя.
Как уже говорили другие, итерация по массиву, вероятно, является наилучшим способом, но было доказано, что убывающий while
цикл является самым быстрым способом итерации в JavaScript. Поэтому вы можете переписать свой код следующим образом:
function contains(a, obj) {
var i = a.length;
while (i--) {
if (a[i] === obj) {
return true;
}
}
return false;
}
Конечно, вы можете также расширить прототип Array:
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] === obj) {
return true;
}
}
return false;
}
И теперь вы можете просто использовать следующее:
alert([1, 2, 3].contains(2)); // => true
alert([1, 2, 3].contains('2')); // => false
Автор: Damir Zekić
Размещён: 25.10.2008 11:10
169 плюса
indexOf
возможно, но это «расширение JavaScript к стандарту ECMA-262; как таковое оно может отсутствовать в других реализациях стандарта».
Пример:
[1, 2, 3].indexOf(1) => 0
["foo", "bar", "baz"].indexOf("bar") => 1
[1, 2, 3].indexOf(4) => -1
AFAICS Microsoft не предлагает какой-то альтернативы этому, но вы можете добавить аналогичные функции для массивов в Internet Explorer (и других браузерах, которые не поддерживают indexOf
), если хотите, как показывает быстрый поиск в Google (например, этот ).
140 плюса
ECMAScript 7 вводит Array.prototype.includes
.
Это можно использовать так:
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
Он также принимает необязательный второй аргумент fromIndex
:
[1, 2, 3].includes(3, 3); // false
[1, 2, 3].includes(3, -1); // true
В отличие от indexOf
, который использует строгое сравнение равенства , includes
сравнивает с помощью алгоритма равенства SameValueZero . Это означает, что вы можете определить, содержит ли массив NaN
:
[1, 2, NaN].includes(NaN); // true
Кроме того, в отличие indexOf
, includes
не пропускает отсутствующие индексы:
new Array(5).includes(undefined); // true
В настоящее время это все еще черновик, но его можно заполнить, чтобы он работал во всех браузерах.
Автор: Oriol Размещён: 01.01.2015 01:40100 плюса
b
это значение, и a
это массив. Возвращает true
или false
:
function(a, b) {
return a.indexOf(b) != -1
}
Автор: william malo
Размещён: 24.03.2012 04:59
71 плюса
Вот совместимая с JavaScript 1.6 реализация Array.indexOf
:
if (!Array.indexOf) {
Array.indexOf = [].indexOf ?
function(arr, obj, from) {
return arr.indexOf(obj, from);
} :
function(arr, obj, from) { // (for IE6)
var l = arr.length,
i = from ? parseInt((1 * from) + (from < 0 ? l : 0), 10) : 0;
i = i < 0 ? 0 : i;
for (; i < l; i++) {
if (i in arr && arr[i] === obj) {
return i;
}
}
return -1;
};
}
Автор: Már Örlygsson
Размещён: 27.10.2008 12:38
66 плюса
Верхние ответы предполагают примитивные типы, но если вы хотите узнать, содержит ли массив объект с некоторой чертой, Array.prototype.some () - очень элегантное решение:
const items = [ {a: '1'}, {a: '2'}, {a: '3'} ]
items.some(item => item.a === '3') // returns true
items.some(item => item.a === '4') // returns false
Приятно то, что итерация прерывается, когда элемент найден, поэтому ненужные итерационные циклы сохраняются.
Кроме того, он хорошо вписывается в if
оператор, поскольку возвращает логическое значение:
if (items.some(item => item.a === '3')) {
// do something
}
* Как отметил в комментарии jamess, на сегодняшний день, сентябрь 2018 года, Array.prototype.some()
полностью поддерживается: таблица поддержки caniuse.com
50 плюса
Использование:
function isInArray(array, search)
{
return array.indexOf(search) >= 0;
}
// Usage
if(isInArray(my_array, "my_value"))
{
//...
}
Автор: Matías Cánepa
Размещён: 13.09.2013 05:32
42 плюса
Расширение Array
объекта JavaScript - это действительно плохая идея, потому что вы вводите новые свойства (ваши пользовательские методы) в for-in
циклы, которые могут нарушать существующие сценарии. Несколько лет назад авторам библиотеки Prototype пришлось перестроить свою библиотечную реализацию, чтобы удалить именно такие вещи.
Если вам не нужно беспокоиться о совместимости с другим JavaScript, работающим на вашей странице, воспользуйтесь этим, в противном случае я бы порекомендовал более неуклюжее, но более безопасное автономное функциональное решение.
Автор: Mason Houtz Размещён: 27.08.2009 04:4527 плюса
Подумав секунду, если вы делаете этот вызов много раз, гораздо эффективнее использовать ассоциативный массив Map для поиска с использованием хеш-функции.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
Автор: MattMcKnight Размещён: 23.12.2009 03:5924 плюса
Один лайнер:
function contains(arr, x) {
return arr.filter(function(elem) { return elem == x }).length > 0;
}
Автор: AlonL
Размещён: 07.01.2015 12:49
22 плюса
Я использую следующее:
Array.prototype.contains = function (v) {
return this.indexOf(v) > -1;
}
var a = [ 'foo', 'bar' ];
a.contains('foo'); // true
a.contains('fox'); // false
Автор: Eduardo Cuomo
Размещён: 15.06.2014 01:15
19 плюса
function contains(a, obj) {
return a.some(function(element){return element == obj;})
}
Array.prototype.some () был добавлен к стандарту ECMA-262 в 5-м издании
Автор: dansalmo Размещён: 12.09.2014 04:5514 плюса
Надеюсь, более быстрый двунаправленный indexOf
/ lastIndexOf
альтернативный
2015
В то время как новый метод включает в себя очень хорошо, поддержка пока практически нулевая.
Давно я думал о том, как заменить медленные функции indexOf / lastIndexOf.
Эффективный путь уже найден, глядя на топовые ответы. Из них я выбрал contains
функцию @Damir Zekic, которая должна быть самой быстрой. Но в нем также говорится, что показатели взяты с 2008 года и поэтому устарели.
Я также предпочитаю while
более for
, но не по определенной причине я закончил писать эту функцию с для цикла. Это также может быть сделано с while --
.
Мне было любопытно, если итерация была бы намного медленнее, если я проверяю обе стороны массива, делая это. По-видимому, нет, и поэтому эта функция примерно в два раза быстрее, чем те, которые проголосовали больше. Очевидно, что это также быстрее, чем родной. Это в реальной среде, где вы никогда не знаете, находится ли значение, которое вы ищете, в начале или в конце массива.
Когда вы знаете, что вы только что выдвинули массив со значением, использование lastIndexOf остается, вероятно, лучшим решением, но если вам нужно перемещаться по большим массивам, и результат может быть везде, это может быть надежным решением для ускорения работы.
Двунаправленный indexOf / lastIndexOf
function bidirectionalIndexOf(a, b, c, d, e){
for(c=a.length,d=c*1; c--; ){
if(a[c]==b) return c; //or this[c]===b
if(a[e=d-1-c]==b) return e; //or a[e=d-1-c]===b
}
return -1
}
//Usage
bidirectionalIndexOf(array,'value');
Тест производительности
http://jsperf.com/bidirectionalindexof
В качестве теста я создал массив с 100k записей.
Три запроса: в начале, в середине и в конце массива.
Я надеюсь, что вы также найдете это интересным и протестируете производительность.
Примечание: Как вы можете видеть , что я немного изменил contains
функцию , чтобы отразить выход IndexOf & LastIndexOf (так в основном true
с index
и false
с -1
). Это не должно причинить вреда.
Вариант прототипа массива
Object.defineProperty(Array.prototype,'bidirectionalIndexOf',{value:function(b,c,d,e){
for(c=this.length,d=c*1; c--; ){
if(this[c]==b) return c; //or this[c]===b
if(this[e=d-1-c] == b) return e; //or this[e=d-1-c]===b
}
return -1
},writable:false, enumerable:false});
// Usage
array.bidirectionalIndexOf('value');
Функцию также можно легко изменить, чтобы она возвращала истину или ложь или даже объект, строку или что-то еще.
И вот while
вариант:
function bidirectionalIndexOf(a, b, c, d){
c=a.length; d=c-1;
while(c--){
if(b===a[c]) return c;
if(b===a[d-c]) return d-c;
}
return c
}
// Usage
bidirectionalIndexOf(array,'value');
Как это возможно?
Я думаю, что простые вычисления для получения отраженного индекса в массиве настолько просты, что это в два раза быстрее, чем выполнение реальной итерации цикла.
Вот сложный пример выполнения трех проверок за итерацию, но это возможно только при более длинных вычислениях, которые вызывают замедление кода.
http://jsperf.com/bidirectionalindexof/2
Автор: cocco Размещён: 19.05.2015 08:2312 плюса
Если вы неоднократно проверяете наличие объекта в массиве, возможно, вам стоит
- Поддержание сортировки массива всегда путем вставки сортировки в ваш массив (поместите новые объекты в нужное место)
- Сделать обновление объектов как удаление + сортировка операции вставки и
- Используйте бинарный поиск в вашем
contains(a, obj)
.
12 плюса
function inArray(elem,array)
{
var len = array.length;
for(var i = 0 ; i < len;i++)
{
if(array[i] == elem){return i;}
}
return -1;
}
Возвращает индекс массива, если найден, или -1, если не найден
Автор: LmC Размещён: 27.06.2012 12:3212 плюса
Мы используем этот фрагмент (работает с объектами, массивами, строками):
/*
* @function
* @name Object.prototype.inArray
* @description Extend Object prototype within inArray function
*
* @param {mix} needle - Search-able needle
* @param {bool} searchInKey - Search needle in keys?
*
*/
Object.defineProperty(Object.prototype, 'inArray',{
value: function(needle, searchInKey){
var object = this;
if( Object.prototype.toString.call(needle) === '[object Object]' ||
Object.prototype.toString.call(needle) === '[object Array]'){
needle = JSON.stringify(needle);
}
return Object.keys(object).some(function(key){
var value = object[key];
if( Object.prototype.toString.call(value) === '[object Object]' ||
Object.prototype.toString.call(value) === '[object Array]'){
value = JSON.stringify(value);
}
if(searchInKey){
if(value === needle || key === needle){
return true;
}
}else{
if(value === needle){
return true;
}
}
});
},
writable: true,
configurable: true,
enumerable: false
});
Использование:
var a = {one: "first", two: "second", foo: {three: "third"}};
a.inArray("first"); //true
a.inArray("foo"); //false
a.inArray("foo", true); //true - search by keys
a.inArray({three: "third"}); //true
var b = ["one", "two", "three", "four", {foo: 'val'}];
b.inArray("one"); //true
b.inArray('foo'); //false
b.inArray({foo: 'val'}) //true
b.inArray("{foo: 'val'}") //false
var c = "String";
c.inArray("S"); //true
c.inArray("s"); //false
c.inArray("2", true); //true
c.inArray("20", true); //false
Автор: dr.dimitru
Размещён: 10.09.2014 12:12
10 плюса
Если вы используете JavaScript 1.6 или новее (Firefox 1.5 или новее), вы можете использовать Array.indexOf . В противном случае, я думаю, вы получите что-то похожее на ваш оригинальный код.
Автор: Andru Luvisi Размещён: 25.10.2008 10:449 плюса
Используйте lodash это некоторая функция.
Это сжато, точно и имеет большую поддержку кроссплатформенности.
Принятый ответ даже не соответствует требованиям.
Требования: Рекомендовать наиболее краткий и эффективный способ выяснить, содержит ли массив JavaScript объект.
Принятый ответ:
$.inArray({'b': 2}, [{'a': 1}, {'b': 2}])
> -1
Моя рекомендация:
_.some([{'a': 1}, {'b': 2}], {'b': 2})
> true
Заметки:
$ .inArray отлично работает для определения, существует ли скалярное значение в массиве скаляров ...
$.inArray(2, [1,2])
> 1
... но вопрос явно требует эффективного способа определить, содержится ли объект в массиве.
Чтобы обрабатывать как скаляры, так и объекты, вы можете сделать это:
(_.isObject(item)) ? _.some(ary, item) : (_.indexOf(ary, item) > -1)
Автор: l3x
Размещён: 21.10.2015 10:57
9 плюса
Решение, которое работает во всех современных браузерах:
function contains(arr, obj) {
const stringifiedObj = JSON.stringify(obj); // Cache our object to not call `JSON.stringify` on every iteration
return arr.some(item => JSON.stringify(item) === stringifiedObj);
}
Использование:
contains([{a: 1}, {a: 2}], {a: 1}); // true
IE6 + решение:
function contains(arr, obj) {
var stringifiedObj = JSON.stringify(obj)
return arr.some(function (item) {
return JSON.stringify(item) === stringifiedObj;
});
}
// .some polyfill, not needed for IE9+
if (!('some' in Array.prototype)) {
Array.prototype.some = function (tester, that /*opt*/) {
for (var i = 0, n = this.length; i < n; i++) {
if (i in this && tester.call(that, this[i], i, this)) return true;
} return false;
};
}
Использование:
contains([{a: 1}, {a: 2}], {a: 1}); // true
Зачем использовать JSON.stringify
?
Array.indexOf
и Array.includes
(а также большинство ответов здесь) сравнивают только по ссылке, а не по значению.
[{a: 1}, {a: 2}].includes({a: 1});
// false, because {a: 1} is a new object
бонус
Неоптимизированный однострочный ES6:
[{a: 1}, {a: 2}].some(item => JSON.stringify(item) === JSON.stringify({a: 1));
// true
Примечание. Сравнение объектов по значению будет работать лучше, если ключи расположены в одном и том же порядке, поэтому для безопасности можно сначала отсортировать ключи с помощью пакета, подобного следующему: https://www.npmjs.com/package/sort-keys
Обновлена contains
функция с улучшенной оптимизацией. Спасибо, что указали на это.
8 плюса
Хотя array.indexOf(x)!=-1
это наиболее лаконичный способ сделать это (и поддерживается браузерами, не входящими в Internet Explorer уже более десяти лет ...), это не O (1), а скорее O (N), что ужасно. Если ваш массив не изменится, вы можете преобразовать его в хеш-таблицу, затем выполните table[x]!==undefined
или ===undefined
:
Array.prototype.toTable = function() {
var t = {};
this.forEach(function(x){t[x]=true});
return t;
}
Демо-версия:
var toRemove = [2,4].toTable();
[1,2,3,4,5].filter(function(x){return toRemove[x]===undefined})
(К сожалению, хотя вы можете создать Array.prototype.contains, чтобы «заморозить» массив и сохранить хеш-таблицу в this._cache в две строки, это приведет к неверным результатам, если вы решите редактировать свой массив позже. У JavaScript недостаточно хуков для позвольте вам сохранить это состояние, в отличие от Python, например.)
Автор: ninjagecko Размещён: 22.04.2012 05:177 плюса
У ECMAScript 6 есть элегантное предложение по поиску.
Метод find выполняет функцию обратного вызова один раз для каждого элемента, присутствующего в массиве, пока не найдет элемент, в котором обратный вызов возвращает истинное значение. Если такой элемент найден, find немедленно возвращает значение этого элемента. В противном случае поиск возвращает неопределенный. обратный вызов вызывается только для индексов массива, которым присвоены значения; он не вызывается для индексов, которые были удалены или которым никогда не присваивались значения.
Вот документация MDN по этому вопросу.
Функциональность поиска работает следующим образом.
function isPrime(element, index, array) {
var start = 2;
while (start <= Math.sqrt(element)) {
if (element % start++ < 1) return false;
}
return (element > 1);
}
console.log( [4, 6, 8, 12].find(isPrime) ); // Undefined, not found
console.log( [4, 5, 8, 12].find(isPrime) ); // 5
Вы можете использовать это в ECMAScript 5 и ниже, определив функцию .
if (!Array.prototype.find) {
Object.defineProperty(Array.prototype, 'find', {
enumerable: false,
configurable: true,
writable: true,
value: function(predicate) {
if (this == null) {
throw new TypeError('Array.prototype.find called on null or undefined');
}
if (typeof predicate !== 'function') {
throw new TypeError('predicate must be a function');
}
var list = Object(this);
var length = list.length >>> 0;
var thisArg = arguments[1];
var value;
for (var i = 0; i < length; i++) {
if (i in list) {
value = list[i];
if (predicate.call(thisArg, value, i, list)) {
return value;
}
}
}
return undefined;
}
});
}
Автор: Pradeep Mahdevu
Размещён: 29.05.2014 04:55
6 плюса
Использование:
var myArray = ['yellow', 'orange', 'red'] ;
alert(!!~myArray.indexOf('red')); //true
Чтобы точно знать, что tilde
~
делать в этот момент, обратитесь к этому вопросу. Что делает тильда, когда она предшествует выражению? ,
4 плюса
Вот как это делает Prototype :
/**
* Array#indexOf(item[, offset = 0]) -> Number
* - item (?): A value that may or may not be in the array.
* - offset (Number): The number of initial items to skip before beginning the
* search.
*
* Returns the position of the first occurrence of `item` within the array — or
* `-1` if `item` doesn't exist in the array.
**/
function indexOf(item, i) {
i || (i = 0);
var length = this.length;
if (i < 0) i = length + i;
for (; i < length; i++)
if (this[i] === item) return i;
return -1;
}
Также посмотрите здесь, как они это подключают.
Автор: Ken Размещён: 27.08.2009 05:103 плюса
Использование:
Array.prototype.contains = function(x){
var retVal = -1;
// x is a primitive type
if(["string","number"].indexOf(typeof x)>=0 ){ retVal = this.indexOf(x);}
// x is a function
else if(typeof x =="function") for(var ix in this){
if((this[ix]+"")==(x+"")) retVal = ix;
}
//x is an object...
else {
var sx=JSON.stringify(x);
for(var ix in this){
if(typeof this[ix] =="object" && JSON.stringify(this[ix])==sx) retVal = ix;
}
}
//Return False if -1 else number if numeric otherwise string
return (retVal === -1)?false : ( isNaN(+retVal) ? retVal : +retVal);
}
Я знаю, что это не лучший способ, но поскольку не существует родного IComparable способа взаимодействия между объектами, я думаю, это настолько близко, насколько вы можете сравнить две сущности в массиве. Кроме того, расширение объекта Array может быть неуместным, но иногда это нормально (если вы знаете об этом и компромиссе).
Автор: Carlos A Размещён: 06.01.2012 01:433 плюса
Можно использовать Set , у которого есть метод "has ()":
function contains(arr, obj) {
var proxy = new Set(arr);
if (proxy.has(obj))
return true;
else
return false;
}
var arr = ['Happy', 'New', 'Year'];
console.log(contains(arr, 'Happy'));
Автор: rlib
Размещён: 16.11.2015 12:26
3 плюса
Вы также можете использовать этот трюк:
var arrayContains = function(object) {
return (serverList.filter(function(currentObject) {
if (currentObject === object) {
return currentObject
}
else {
return false;
}
}).length > 0) ? true : false
}
Автор: user2724028
Размещён: 10.01.2016 10:06
3 плюса
ОК, вы можете просто оптимизировать свой код, чтобы получить результат!
Есть много способов сделать это, которые будут чище и лучше, но я просто хотел получить ваш шаблон и применить его JSON.stringify
, просто сделав что-то подобное в вашем случае:
function contains(a, obj) {
for (var i = 0; i < a.length; i++) {
if (JSON.stringify(a[i]) === JSON.stringify(obj)) {
return true;
}
}
return false;
}
Автор: Alireza
Размещён: 02.07.2017 11:31
2 плюса
Как уже упоминали другие, вы можете использовать Array.indexOf
, но это доступно не во всех браузерах. Вот код из https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf, чтобы заставить его работать так же в старых браузерах.
indexOf - недавнее дополнение к стандарту ECMA-262; как таковой он может присутствовать не во всех браузерах. Вы можете обойти это, вставив следующий код в начало ваших сценариев, позволяя использовать indexOf в реализациях, которые изначально не поддерживают его. Этот алгоритм в точности соответствует алгоритму, указанному в ECMA-262, 5-е издание, при условии, что Object, TypeError, Number, Math.floor, Math.abs и Math.max имеют исходное значение.
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
"use strict";
if (this == null) {
throw new TypeError();
}
var t = Object(this);
var len = t.length >>> 0;
if (len === 0) {
return -1;
}
var n = 0;
if (arguments.length > 1) {
n = Number(arguments[1]);
if (n != n) { // shortcut for verifying if it's NaN
n = 0;
} else if (n != 0 && n != Infinity && n != -Infinity) {
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
}
if (n >= len) {
return -1;
}
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
for (; k < len; k++) {
if (k in t && t[k] === searchElement) {
return k;
}
}
return -1;
}
}
Автор: Simon_Weaver
Размещён: 12.03.2013 05:44
2 плюса
Отнюдь не лучший, но я просто проявлял творческий подход и добавлял в репертуар.
Не используйте это
Object.defineProperty(Array.prototype, 'exists', {
value: function(element, index) {
var index = index || 0
return index === this.length ? -1 : this[index] === element ? index : this.exists(element, ++index)
}
})
// Outputs 1
console.log(['one', 'two'].exists('two'));
// Outputs -1
console.log(['one', 'two'].exists('three'));
console.log(['one', 'two', 'three', 'four'].exists('four'));
Вопросы из категории :
- javascript Как определить, какой из указанных шрифтов был использован на веб-странице?
- javascript Валидация клиентской стороны ASP.Net
- javascript Длина объекта JavaScript
- javascript Получение текста из выпадающего списка
- arrays Как удалить дубликаты из массива C #?
- arrays Как определить размер моего массива в C?
- arrays Каков наилучший способ конвертировать массив в хеш в Ruby
- arrays Сравнение двухбайтовых массивов в .NET
- algorithm Функция для создания цветовых колес
- algorithm Big O, как вы рассчитываете / приближаете это?
- algorithm Пиковое обнаружение измеренного сигнала
- algorithm Головоломка: Найти самый большой прямоугольник (проблема максимального прямоугольника)
- time-complexity Как проверить, содержит ли массив объект в JavaScript?
- time-complexity Вычислительная сложность последовательности Фибоначчи
- time-complexity В чем разница между ? (n) и O (n)?
- time-complexity Что такое простое английское объяснение обозначения "Big O"?
- javascript-objects Как динамически объединить свойства двух объектов JavaScript?
- javascript-objects Как удалить свойство из объекта JavaScript?