Подтвердить что ты не робот

Как я могу умножить каждый элемент массива на скаляр в javascript?

Например, как достичь следующего без итерации по массиву?

var a = [1, 2, 3] * 5;  // a should equal [5, 10, 15]
4b9b3361

Ответ 1

Array.map() доступен для пользователей IE, как и для IE9, поэтому, если вы вообще не заботитесь о совместимости, вы можете использовать это:

var a = [1, 2, 3].map(function(x) { return x * 5; });

Для JavaScript 1.8 это как можно короче:

var a = [1, 2, 3].map(function(x) x * 5);

Если вам нужна максимальная совместимость с браузером, вам придется мириться с циклом.

В любом случае вы будете выполнять итерацию по массиву; Array.map() просто делает это менее очевидным, что вы это делаете.

Ответ 2

В ECMAScript 6 вы можете использовать функции стрелок:

var a = [1, 2, 3];
var b = a.map(x => x * 5); // <-------

console.log(b);   // [5, 10, 15]

Функции стрелок являются синтаксическим сахаром для встроенной функции с лексическим связыванием this:

// ES6
let array2 = array1.map(x => x * 5);
// ES5
var array2 = array1.map((function (x) { return x * 5; }).bind(this));

Поэтому, если вам нужна поддержка Internet Explorer или других старых браузеров (Edge понимает ES6), вы можете использовать babeljs или TypeScript в своем проекте для пересечения -компилируйте ваш код в синтаксис ES5.

Ответ 3

for(var i=0; i<a.length; i++) {
    a[i] *= 5;
}

Ответ 4

Экземпляр 2016 (ES7) определяет SIMD-математику, которая позволяет делать умножения, подобные тому, который вы хотите быстрее и проще. Тем не менее, на сегодняшний день SIMD поддерживает очень мало браузера (только поддержка Firefox в ночное время поддерживает это) [1], [2]. Вот как это будет выглядеть:

var a = SIMD.Float32x4(1, 2, 3);
var b = SIMD.Float32x4(5, 5, 5);
SIMD.Float32x4.mul(a, b);  // Float32x4[5, 10, 15]

Пока не будет широко распространенной поддержки SIMD, вам придется прибегать к использованию карты

var a = [1, 2, 3].map(function(x) { return x * 5; });

который хорошо поддерживается всеми современными браузерами [3].

Ответ 5

Вы можете использовать .map, но вам также нужно создать новую переменную, чтобы вывести новые значения в:

var a = [1,2,3];

var b = a.map(function(x){
    return x * 5;
});

alert(b);

Ответ 6

var a, i, ii, term;

a = [1,2,3];
term = 5;

for (i=0, ii=a.length; i<ii; i++) {
  a[i] = a[i] * term;
}

Ответ 7

Вы можете попробовать следующее:

function scalarMultiply(arr, multiplier) {
   for (var i = 0; i < arr.length; i++)
   {
      arr[i] *= multiplier;
   }
   return arr;
}

ИСПОЛЬЗОВАНИЕ

var a = scalarMultiply([1, 2, 3], 5);

Ответ 8

Как указано в Docs:

Метод map() создает новый массив с результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.

По-моему, .map() более подходит, если кто-то хочет создать новый массив на основе входных значений из текущего массива.

Однако, если кто-то хочет изменить массив на месте, .forEach() кажется лучшим выбором.

В ES6 мы можем использовать:

Следующий код изменит данный массив arr на месте (без создания нового):

arr.forEach((value, index) => {arr[index] *= 5});

Demo:

var arr = [1, 2, 3];
var scalar = 5;

arr.forEach((value, index) => {
    arr[index] *= scalar;
});
console.log(arr);

Ответ 9

Используя функцию отображения Lodash, это возвращает исходный массив a, умноженный на константу 5:

_.map( a, function multiply(x){ return x*5; } );