Обратите внимание, что в JavaScript вы можете напрямую передать анонимную функцию

тоящее время я изучаю JavaScript. И я попытался использовать цикл foreach для обновления моих элементов в массиве. Но проблема в том, что результат "console.log" всегда был таким же массивом, как и раньше. Ниже приведен код. Может кто-нибудь помочь рассказать о проблеме?

var test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4,
    19, 300, 3775, 299, 36, 209, 148, 169, 299,
    6, 109, 20, 58, 139, 59, 3, 1, 139
];

var addNum = function(element,index,array){
    if(element%3===0)
    {
        element += 100;
    }
};

test.forEach(addNum);
console.log(test);

Ответы на вопрос(2)

addNum функция,element это просто аргумент. Когда вы изменяете его, вы изменяете только значение внутри функции, а не фактический элемент в массиве.

Чтобы изменить массив, вам нужно нацелить элемент:

var test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4,
    19, 300, 3775, 299, 36, 209, 148, 169, 299,
    6, 109, 20, 58, 139, 59, 3, 1, 139
];

var addNum = function(element, index, array) {
    if (element % 3 === 0) {
        array[index] = element + 100;
    }
};
test.forEach(addNum);
console.log(test);

Обратите внимание, что в JavaScript вы можете напрямую передать анонимную функциюforEach():

test.forEach(function(element, index, array) {
    if (element % 3 === 0) {
        array[index] = element + 100;
    }
});

что в JavaScript аргументы передаются по значению, а не по ссылке.
Так меняетсяelement аргумент ничего не делает.

В вашем случае лучше использоватьmap, нравится:

var addNum = function(element,index,array){
    if(element%3===0)
    {
        return element + 100;
    }

    return element
};

const result = test.map(addNum);
console.log(result);

Если вам действительно нужно использоватьforEach - вы могли бы сделать это так:

var test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4,
    19, 300, 3775, 299, 36, 209, 148, 169, 299,
    6, 109, 20, 58, 139, 59, 3, 1, 139
];

var addNum = function(element,index,array){
    if(element%3===0)
    {
        array[index] += 100;
    }
};

test.forEach(addNum);
console.log(test);

Но это, на мой взгляд, плохая практика.
forEach предназначен для работы с каждым элементом в массиве без изменения, ноmap специально разработан для создания нового массива, выполняющего функцию для каждого элемента предоставленного массива.
Также смотрите обсуждение здесьЕсть ли разница между foreach и map?

 Angel Politis30 дек. 2017 г., 01:38
Почему используетсяforEach плохая практика точно? Любая ссылка, чтобы поддержать это?
 jmowla30 дек. 2017 г., 01:25
Это правильный ответ, почему downvote?
 Sébastien30 дек. 2017 г., 01:27
Да, это. Кто-то, кажется, отрицает все ответы здесь ...
 jmowla30 дек. 2017 г., 01:33
Более короткая версия, которую я мог успешно запустить на FireFox 57: const result = test.map (i => i% 3 === 0? I + 100: i);
 Huskie30 дек. 2017 г., 01:28
Да, может быть, тот, кто ответил, был удален секунду назад

Ваш ответ на вопрос