将返回值传递回循环

时间:2017-01-09 14:09:20

标签: javascript arrays for-loop nested

我很尴尬地问这个,但我是一个新手,所以在这里它... ...

我有一个整数数组,我想循环并将每个整数除以另一个数组中的除数。

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)。但是,就像我说的,我是一个新手。

任何帮助将不胜感激。感谢。

4 个答案:

答案 0 :(得分:2)

这适用于O(n + m):

&#13;
&#13;
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)
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以使用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);

答案 2 :(得分:0)

我建议您快速编写代码: 首先使用嵌套的 Array.map()获得预期结果作为2D数组 第二步将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);

答案 3 :(得分:0)

显然,这可以由.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);