【JavaScript】二叉树中和为某一值的路径(剑指offer)关于Array.of的问题

res.push(Array.of(...list))

其中res、list都为数组,那么上面这句话是不是等同于res.push(list)
在list不为空的情况下,如果也不存在Array.of(3)这种情况。

但是我用res.push(list)就出现问题。

完整代码如下:

function FindPath(root, num)
{
    // write code here
    var res=[];
    var list=[];
    return getPath(root,num,res,list);
}
function getPath(root,num,res,list){
    if(root==null)return res;
    list.push(root.val);
    num=num-root.val;
    if(root.left==null && root.rigth==null && num==0){
        res.push(Array.of(...list));
    }
    if(root.left!=null) getPath(root.left,num,res,list);
    if(root.right!=null) getPath(root.right,num,res,list);
    list.pop();
    return res;
}

这个题,逻辑都没什么问题,一直出错,看了别人的代码才发现是这个问题,但是我不太理解这部分.......

谢谢大家

参考GPT和自己的思路:

是的,Array.of(...list)等同于使用list数组的值作为参数创建一个新的数组,并将此新数组添加到res数组中。这样做的原因是因为Array.of可以创建一个具有任意数量的元素的新数组,而不需要担心参数的数量或类型。

使用res.push(list)则只是将list数组作为一个元素添加到res数组中,这样做会导致结果不正确。

在list不为空的情况下,不存在Array.of(3)这种情况是正确的,因为Array.of需要至少一个参数。如果list为空,则Array.of将创建一个只有一个元素的新数组,其值为undefined。

在你的代码中,使用res.push(Array.of(...list))将有效地创建一个包含list数组的所有元素的新数组,并将其添加到res数组中,从而实现将路径添加到结果中的目的。