我很尴尬地问这个,但我是一个新手,所以在这里它... ...
我有一个整数数组,我想循环并将每个整数除以另一个数组中的除数。
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)。但是,就像我说的,我是一个新手。
任何帮助将不胜感激。感谢。
答案 0 :(得分:2)
这适用于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)
&#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);