Комментарии 20
Spread оператор работает с последовательностями, а не с псевдомассивами. Ему свойство length
не требуется, ему Symbol.iterator
нужен.
И да, замена прототипа псевдомассив настоящим массивом не сделает, хоть и даст нужные методы. Это можно заметить если к такому "массиву" применить функцию Array.isArray
или JSON.stringify
И если считать, что псевдомассив, это каждый объект имеющий свойство length, то было бы проще сказать, что в js все объекты псевдомассивы, так как они все унаследованы от Object, у которого есть свойство length.
Object
есть стандартное свойство length
. Псевдомассив потому, что в объекте в качестве ключей используется числовые значения, но объект не является массивом. И я сказал, что JavaScript может преобразовать любой объект в массив, если тот соответствует условию из статьи.Ноги у "псеводомассивов" растут из первой версии языка, в которой собственно массивов не было, а DOM-интерфейс содержал списки элементов.
Хэш-таблица это просто один из способов организации словаря и собственно называть так любую key-value структуру особо смысла нет — внутри может быть хэш-таблица, а может и не быть.
Можно вместо этого сначала переписать их в псевдомассив.
myPseudoArray.each = Array.prototype.forEach;
myPseudoArray.sort = Array.prototype.sort;
myPseudoArray.sort( coolSortFun ).each( myLog );
Но опять же, не в продакшене. На Тостере мне уже говорили, что это ай-я-яй.
В списке есть Map, но он не подходит под определение
То есть у него есть числовые свойства (индексы) и свойство length.
т.к. length всегда равен '1' и индекс могут быть любыми.
Да и перечисленные методы с ним корректно работать не будут.
[undefined]
Наличие индексов не спасает.
Array.prototype.slice.call(new Map([[0, "value1"], [1, "value2"]])) // > []
В данном случае должно присутствовать свойство length, равное размеру псевдомассива. А его нет.
{0: 'value1', 1: 'value1'}
, который не является псевдомассивом… вы его ни в одной функции массивов не сможете использоватьне является псевдомассивом
Я вам и пишу, что Map (который вы перечислили в статье) не подходит на роль псевдомассива. Или вы о каком-то другом Map?
Объективно №3 самый универсальный способ и стоит его придерживаться.
Немного о псевдомассивах (массивоподобных объектах или коллекциях). «Что это?», «Как с ними работать?» и прочее