Задать вопрос
@junior81

Удаление первого свойства у любого количества массивов, почему не работает .shift()?

Подскажите почему не работает .shift()
function changeCollection(...arr) {
    for(let i =0, len = arr.length; i <= len; i++){
        arr[i].shift();
    }
    return arr;
}
  • Вопрос задан
  • 187 просмотров
Подписаться 1 Оценить 2 комментария
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
.shift() работает. Ошибки в другом:
  1. ...оператор расширения (spread syntax) работает не в объявлении функции, а в её вызове; Upd. в объявлении функции троеточие тоже возможно и называется «оставшиеся параметры» (rest parameters) и, в отличие от arguments в моём ответе (массивоподобный объект) является полноценным массивом переданных параметров. Всё это часть нового синтакса ECMAScript 6 и поддерживается не всеми браузерами.
  2. в цикле вы перебираете включая i = len, но в массиве, скажем, длиной 3 нет элемента с индексом 3. Самый большой индекс это длина – 1 = 2: [0, 1, 2]
  3. На вход подаются массивы, неизвестное их количество. На выход функция может вернуть только одно значение. Пусть это будет массив массивов.


Традиционный вариант, работающий везде:
function changeCollection() {
  var result = [], i;
  for( i = 0; i < arguments.length; i++) {
    arguments[i].shift();
    result.push( arguments[i]);
  }
  return result;
}

var args = [ [1,2,3], [4,5,6]];
changeCollection( ...args) // эксперимент не для всех браузеров [[2,3],[5,6]]
changeCollection( [7,8,9], ['a','b','c']) // работает везде [[8,9],["b","c"]]


Upd. как вариант на ES6:
function changeCollection(...arr) {
  for( let i = 0; i < arr.length; i++) {
    arr[i].shift();
  }
  return arr;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы