JavaScript将对象列表更改为数组。 return undefined
问题描述:
function listToArray(list){
var newArray = [];
repeat();
function repeat(){
newArray.push(list.value);
if(list.rest == null){
return obj = newArray; // I don't know why It returns undefined here
}
else {
list = list.rest;
repeat();
}
}
}
// and this will return an array
function reTurn(){
var listVar = [5, 4, 3, 2, 1];
return obj = listVar;
}
当我在控制台中查找它时,该函数确实会改变我的obj,但返回undefined。 任何人都可以帮助我?请JavaScript将对象列表更改为数组。 return undefined
答
只是return newArray
- 你不能返回这样的任务。
+0
为什么你不能? – 2017-08-15 04:41:53
答
你从内部函数返回,而不是外部函数。将return newArray
添加到listToArray
的底部。将repeat
中的return
声明更改为return;
。
function listToArray(list){
var newArray = [];
repeat();
function repeat(){
newArray.push(list.value);
if (list.rest) {
list = list.rest;
repeat();
}
}
return newArray;
}
递归方法没有什么不对,但没有必要。你可以很容易地编写
function listToArray(list){
var newArray = [];
while (list) {
newArray.push(list.value);
list = list.rest;
}
return newArray;
}
然而,即使这个代码的缺点是它是混合列表的遍历与值数组的建设。这将是更好地把这些分开:
function traverseList(list, fn) {
while (list) {
fn(list.value);
list = list.rest);
}
}
现在你可以写listToArray
作为
function listToArray(list) {
var newArray = [];
traverseList(list, value => newArray.push(value));
return newArray;
}
我也可能会这样写作为发电机:
function* forList(list) {
while (list) {
yield list.value;
list = list.rest;
}
}
现在,我甚至不需要一个单独的函数来创建数组值,因为我可以只写
[...forList(list)]
+0
谢谢!有用! –
函数'listToArray()'不返回任何东西 - 只有'repeat()'做。你必须'return repeat();'如果你想从'listToArray()'中获得一些东西' – fen1x