我正在学习地图&减少,但我很难理解如何利用这些方法来解决问题。
例如,
创建一个带数字的函数,并返回一个字符串数组,其中包含每个数字处截止的数字。
420应该返回[" 4"," 42"," 420"]
我的老方法:
function createArrayOfTiers(num) {
var numArr = num.toString().split('');
var output = [];
for(var i = numArr.length-1; i>=0; i--) {
output.unshift(numArr.join('');
numArr.pop();
}
return output;
}
尝试使用map-reduce组合:
function createArrayOfTiers(num) {
var numArr = num.toString().split('');
return numArr.map(function(element) {
var newElement = numArr.reduce(function(acc, val) {
return acc + val;
});
numArr.splice(element, 1);
return newElement;
});
}
答案 0 :(得分:1)
你使用了两个循环,但显然它只能用一个循环完成。
function n(num) {
let res = (""+num).split('').map((_,i) => (""+num).slice(0, i+1));
return res;
}
console.log(n(420));
console.log(n(13579));
一衬垫。
const n = num => (""+num).split('').map((_,i) => (""+num).slice(0, i+1));
console.log(n(420));
console.log(n(13579));
答案 1 :(得分:0)
我不认为这些是map
或reduce
的良好用例,但这里有:
var numArr = [4,2,0];
var result = numArr.map(e => numArr.join('')) // now ["420", "420", "420"]
.map((arr, i) => arr.substring(0, i+1)) // now ["4", "42", "420"]
console.log(result);
我们首先用连接成字符串的整个(未修改的)数组替换数组的每个元素,然后根据它们在外部数组中的位置对每个字符串进行子字符串。
虽然未使用reduce
,但隐藏在其中的缩减:join
会将[4, 2, 0]
缩减为"420"
。
我正在学习地图&减少,但我很难理解如何利用这些方法来解决问题。
将关联映射到源数组的每个值的映射函数提供的新值:如果您有一个[x, y, z]
数组,一个映射函数f(x)=x+1
,则使用该函数映射数组的结果将是[x+1, y+1, z+1]
。
我认为减少意味着将数组“减少”为原始类型,尽管我可能会弄错。如果您有[x, y, z]
数组并使用加法运算将其减少,则结果将为x+y+z
。
答案 2 :(得分:0)
正如其他人所说,这个问题似乎并不是map
和reduce
函数的最佳用例。
map
函数在参数中提供element
,index
和array
信息。利用这些,您可以迭代应用reduce
函数所需的元素。
语句var arrayToIterate = arr.slice(0,i+1);
有助于实现上述数组迭代。
完整代码:
function createArrayOfTiers(num) {
var numArr = num.toString().split('');
return numArr.map(function(element, i, arr) {
var arrayToIterate = arr.slice(0,i+1);
var newElement = arrayToIterate.reduce(function(acc, val) {
return acc + val;
},"");
return newElement;
});
}
var result = createArrayOfTiers(420);
console.log(result);