2017-02-17 2 views
1

Я использую эту функцию массива и знаю, что они не меняют исходный массив. исправьте меня, если я ошибаюсь.JavaScript Map, Filter, redule, forEach не изменяет исходный массив. правильно?

И эти функции не работают на объекте.

Есть ли что-либо в javascript, который изменит исходный массив. Я знаю, что работа вокруг

arr = arr.map((val, index)=>{// change value here}); // I dont want to assign the aray it shelf

Я хочу что-то вроде

arr.map((val, index)=>{// change value here}); // it should change the original array

+1

'arr.forEach ((значение, индекс) => обр [индекс] = ...)' – Andreas

ответ

1

Ни один из этих методов имеют побочные эффекты для каждого элемента, так как все в JavaScript передается по значению. Вы можете сами изменить сами элементы, а не то, что указано в массиве.

Если вы действительно хотите изменить исходный массив, это может сделать обычный цикл for или просто использовать аргумент index.

for (var i = 0; i <= arr.length; i++) { 
    if (shouldReplace(i)) { 
    arr[i] = newValue(i); 
    } 
} 
0

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

arr.forEach((val, index)=>{val.foo = bar;}); 
0

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

var arr = ['apple', 'orange', 'banana', 'grape']; 
 

 
arr.map((item, idx, org) => org[idx] = '1 ' + item); 
 

 
console.log(arr);

+2

почему использование карты - что создает неиспользуемый массив. –

+0

Работает ли он для всех остальных, таких как фильтр, уменьшить, для каждого? –

+1

@AniruddhaDas каждый из них перебирает всю коллекцию, и у них есть своя специфическая утилита. –