gpt4 book ai didi

javascript - 为什么期望值没有返回?

转载 作者:行者123 更新时间:2023-12-01 02:34:50 25 4
gpt4 key购买 nike

function _Obj(arr) {
if(arr.filter( cur => {
return (cur instanceof Array)
}).length === 0) {
return _assign(arr); // Here i try return the result
} else {
_Obj(Array.prototype.concat.apply([], arr));
}

function _assign(e) {
var r = {};
e.forEach((cur, index, arr) => {
if(index%2 === 0 || index === 0) r[cur] = arr[index + 1];
});
console.log(r) // This is the result, this should be returned
return r; // the result
}
}



var data = [
[
['firstName', 'Joe'],
['lastName', 'Blow'],
['age', 42],
['role', 'clerk']
]
];

console.log(_Obj(data));

我正在删除嵌套数组,但未返回预期值(内部没有数组的数组),但为什么?如果我返回的是 _assign 函数返回的内容,那么我就知道自己失败了。

我需要返回返回的函数的值_assign(),但它没有返回,结果也是正确的,我用console.log(),那么错误是什么?

我不是指算法本身,我的意思是函数_Obj ()应该返回_assign ()函数返回的值,但它不会发生,为什么?

最佳答案

@Mt. Schneiders的答案几乎涵盖了代码失败的主要原因。

简单地说,如果您不返回在递归函数的每次迭代中获得的中间值,这些值就会丢失。

以下伪代码类似于给定示例中递归函数的工作原理,应该有助于弄清楚问题发生的原因:

_Obj [
_Obj [
return _assign
]
]

在上面,函数_Obj调用_Obj,而_Obj又调用函数_assign。由于返回了 _assign 的值,因此内部 _Obj 的值现在等于该值。然而,外部 _Obj 的值是 未定义,因为内部 _Obj 没有返回任何内容。

为了使 _Obj 按预期运行,伪代码应如下所示:

_Obj [
return _Obj [
return _assign
]
]

现在,由于返回了内部_Obj的值,因此最终记录到控制台的值是_assign的值。

下面,我提供了正确代码的更清晰、更易读的版本。

片段:

function _assign (array) {
/* Create an object. */
var object = {};

/* Iteratew over every element in the array. */
array.forEach(function(element, index) {
/* Check if the index is even. */
if (index % 2 == 0) object[element] = array[index + 1];
});

/* Return the object. */
return object;
}

function _Obj(array) {
/* Filter the array. */
var filtered = array.filter(current => current instanceof Array);

/* Call either _assign or _Obj and return its value. */
return (filtered.length === 0) ? _assign(array) : _Obj([].concat.apply([], array));
}


/* Example. */
console.log(_Obj([
[
['firstName', 'Joe'],
['lastName', 'Blow'],
['age', 42],
['role', 'clerk']
]
]));

注释:

  1. 由于 0 % 2 = 0,使用 if (index % 2 === 0 || index === 0) 是多余的。只需使用
    if (index % 2 == 0)就足够了。

  2. 您最好在 _Obj 之外定义 _assign,因为根据您的代码当前的结构方式,_assign 是每次调用 _Obj 时都会反复定义。

  3. 使用 cur => { return (cur instanceof Array) } 不必要地冗长。您可以改为编写 cur => cur instanceof Array

关于javascript - 为什么期望值没有返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48009378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com