Я смущен, чтобы спросить это, но я новичок, так что вот оно ...

У меня есть массив целых чисел, которые я хочу перебрать и разделить каждое целое число делителем в другом массиве.

integers = [50, 20, 18, 27, 19]
divisors = [2, 3, 2]

Переберите целые числа и разделите на divisors[0]. Возьмите полученный массив и разделите каждое целое число на divisors[1]. Возьмите полученный массив и разделите каждое целое число на divisors[2].

Довольно легко, я знаю, но я не могу понять, как передать новый массив в качестве аргумента.

Вот что у меня так далеко. Мне нужно получить массив длиной 5, но я получу один из 15.

const divide = function(arr) {
var result = []
for (i = 0; i < divisors.length; i++) {
    for (j = 0; j < arr.length; j++) {
        result.push(Math.floor(arr[j] / divisors[i]))
        // how do I pass "result" as new value for "arr"?
    }
  }
  return result
}
console.log(divide(integers))

С точки зрения big-O, я знаю, что это не самый эффективный способ решения этой проблемы, поскольку результатом будет O (n ^ 2). Но, как я уже сказал, я новичок.

Любая помощь была бы признательна. Спасибо.

1
y-intercept 9 Янв 2017 в 17:09

4 ответа

Лучший ответ

Вы можете использовать Array.reduce() для итерации делителей и возврата нового массива, Array.map используя предыдущий массив:

var integers = [50, 20, 18, 27, 19];
var divisors = [2, 3, 2];

var result = divisors.reduce(function(r, div) {
  return r.map(function(n) { // the new array after dividing each element by current divistor
    return n / div; 
  });
}, integers); // the initial array

console.log(result);
1
Ori Drori 9 Янв 2017 в 14:12

Это работает и работает в O (n + m):

var integers = [50, 20, 18, 27, 19];
var divisors = [2, 3, 2];

// compute product of all divisors
var product = divisors.reduce((x, y) => x * y)

// map each integer to result of division, rounded down
var result = integers.map(i => Math.floor(i / product))

console.log(result)
2
fafl 9 Янв 2017 в 14:34

Очевидно, что это может быть сделано .map() и .reduce() из рук в руки;

var integers = [50, 20, 18, 27, 19],
    divisors = [2, 3, 2],
      result = integers.map(n => divisors.reduce((r,d) => r/d,n)) ;
console.log(result);
0
Redu 9 Янв 2017 в 14:53

Я предлагаю вам быстрый код для: сначала получить ожидаемый результат в виде двумерного массива с вложенным Array.map () второй плоский 2D-массив в плоский с помощью Array.reduce ()

var integers = [50, 20, 18, 27, 19];
var divisors = [2, 3, 2];
var results = divisors.map(x => integers.map(y => Math.floor(y/x))).reduce((a,b) => a.concat(b));
console.log(results);
0
kevin ternet 9 Янв 2017 в 14:34