Удалить элементы из начала массива внутри al oop без изменения исходного массива - PullRequest
0 голосов
/ 23 февраля 2020

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

let arr1 = [1,2,3,4,5]
for(i = 0; i < 5; i++){arr1.splice(i,1);}

, в этом примере выше arr1 изменяется после каждой итерации, например: - [2,3 , 4,5] ... [3,4,5] .. et c

что я хочу достичь: -

let arr1 = [1,2,3,4,5];
for(i = 0; i < 5; i++){
    let arr2 = arr1.splice(i,1);
}

результат этого должен дать arr1 как [1,2,3,4,5] во всей итерации ... но arr2 как [2,3,4,5] ... [3,4,5] .. et c ... .. В основном, я хочу, чтобы функция сплайсинга не манипулировала исходным массивом, а выдала результат в новом массиве, а исходный массив оставался неизменным на протяжении всей итерации ... есть ли способ сделать это?

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

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

let arr1 = [1, 2, 3, 4, 5];
for (let i = 0; i < 5; i++) {
    console.log(...arr1.slice(i + 1));
}
1 голос
/ 23 февраля 2020

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

const src = [1,2,3,4,5],
      res = src.map((_,i,s) => s.slice(i))
      
console.log(JSON.stringify(res))
.as-console-wrapper{min-height:100%;}

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

let arr1 = [1,2,3,4,5];
for(i = 0; i < 5; i++){
    let arr2 = arr1.slice(i+1)
    //log stringified arr2
    console.log(JSON.stringify(arr2))
}
.as-console-wrapper{min-height:100%;}

Или воспользуйтесь Array.prototype.forEach:

let arr1 = [1,2,3,4,5];
arr1.forEach((_,i,s) => {
  const arr2 = s.slice(i+1)
  // log stringified arr2
  console.log(JSON.stringify(arr2))
 
})
.as-console-wrapper{min-height:100%;}
...