我最近完成了一个JavaScript挑战,要求返回一个初始数组的所有值都加倍的新数组。
const numbers = [1, 2, 3];
function double() {
}
只是我要包括一些ES6主题,涉及解构和休息/扩展运算符以及递归。好吧,我尽力完成了解决方案。这是我的解决方案:
const numbers = [1, 2, 3];
function double(arr){
const doubledNumbers = [];
for (var i = 0; i < arr.length; i ++){
const dubba = arr[i];
const bubba = dubba * 2;
doubledNumbers.push(bubba);
}
return doubledNumbers;
}
另一个要求是不使用任何数组辅助方法(映射,reuce等),因此我没有使用map()
,而是使用了for
循环。但是,我不能全神贯注于实现解构或休息/扩展运算符,我认为我很了解的概念,没关系递归。
答案 0 :(得分:5)
这是一个可能的实现-分解double
的参数,取出数组中的第一个数字,并使用rest语法将其余的数字放入另一个数组中。然后,double
数组的其余部分,并将其散布到一个新的(返回的)数组中,以第一个数字乘以2:
const numbers = [1, 2, 3];
function double([firstNum, ...rest]) {
const restDoubled = rest.length ? double(rest) : [];
return [firstNum * 2, ...restDoubled];
}
console.log(double(numbers));
答案 1 :(得分:2)
这里有几种选择-
const None =
Symbol("None")
const double = ([ x = None, ...more ]) =>
x === None
? []
: [ x * 2, ...double(more) ]
console.log(double([ 1, 2, 3, 4 ]))
// [ 2, 4, 6, 8 ]
不破坏结构-
const double = (nums = [], i = 0) =>
i >= nums.length
? []
: [ nums[i] * 2, ...double(nums, i + 1) ]
console.log(double([ 1, 2, 3, 4 ]))
// [ 2, 4, 6, 8 ]
使用高阶函数(接受或返回其他函数的函数)-
const None =
Symbol("None")
const identity = x =>
x
const map = ([ x = None, ...more ], f = identity) =>
x === None
? []
: [ f(x), ...map(more, f) ]
const double = (nums = []) =>
map(nums, n => n * 2)
console.log(double([ 1, 2, 3, 4 ]))
// [ 2, 4, 6, 8 ]
使用延续传递样式-
const None =
Symbol("None")
const identity = x =>
x
const double = ([ x = None, ...more ], then = identity) =>
x === None
? then([])
: double(more, r => then([ x * 2, ...r ]))
double([ 1, 2, 3, 4 ], console.log)
// [ 2, 4, 6, 8 ]
答案 2 :(得分:0)
为什么我们可以使用下面的简单代码来使用递归
numbers = numbers.map(x => 2*x)
答案 3 :(得分:0)
我的解决方案如下-
person.id Treatment easy_comp medium_comp age female
1_1 Happy 5 2 29 1
1_1 Happy NA NA 29 1
1_2 Happy 3 5 25 0
1_2 Happy NA NA 25 0
1_3
...
答案 4 :(得分:0)
另一种方式:
const numbers = [1, 2, 3];
const arr = [];
function double([x, ...some]) {
arr.push(x*2);
if(!some.length)
return arr;
return double(some);
}
double(1,2,3)
将返回double(2,3)
,依次返回double(3)
,最后double(3)
将返回数组[2,4,6]