Javascript 包含初始值后的Array.prototype.reduce()错误

Javascript 包含初始值后的Array.prototype.reduce()错误,javascript,arrays,reduce,Javascript,Arrays,Reduce,我在一个函数中使用reduce(),从一些文档中获取单个值。一般来说,这是可以预期的。然而,偶尔我会得到一个错误“reduce不是一个函数”。我知道,根据文档,“在没有初始值的空数组上调用reduce()是一个错误”——因此我传递“0”来处理这个问题。但我仍然有时——尽管很少——会出错。只是想了解发生了什么 我的代码如下所示: let totalOpenBalance = docs.reduce((a, curr) => a + curr.openBalance, 0); [

我在一个函数中使用
reduce()
,从一些文档中获取单个值。一般来说,这是可以预期的。然而,偶尔我会得到一个错误“reduce不是一个函数”。我知道,根据文档,“在没有初始值的空数组上调用reduce()是一个错误”——因此我传递“0”来处理这个问题。但我仍然有时——尽管很少——会出错。只是想了解发生了什么

我的代码如下所示:

 let totalOpenBalance = docs.reduce((a, curr) => a + curr.openBalance, 0);
[
    {
        "_id": "3s14020471287f4a9bbe9878",
        "openBalance": 120,
        "field3": 25
    },
    {
        "_id": "2d75020471986f4a9bbe7231",
        "openBalance": 15,
        "field3": 22
    }
]
我调用的数据如下所示:

 let totalOpenBalance = docs.reduce((a, curr) => a + curr.openBalance, 0);
[
    {
        "_id": "3s14020471287f4a9bbe9878",
        "openBalance": 120,
        "field3": 25
    },
    {
        "_id": "2d75020471986f4a9bbe7231",
        "openBalance": 15,
        "field3": 22
    }
]

错误消息“reduce不是函数”与传递给
reduce
的参数无关–它指的是
文档。reduce
部分代码。当
docs
reduce
属性不是预期的函数,而是其他类型的值(如
undefined
)时,会出现此错误消息


由于所有数组都有一个
reduce
函数,这意味着有时
docs
变量不是数组。在该行之前添加
console.log(docs)
,查看它是什么类型,并检查分配给它的位置,查看它是错误类型的原因。

错误消息“reduce不是函数”与传递给
reduce
的参数无关–它指的是
文档。reduce
部分代码。当
docs
reduce
属性不是预期的函数,而是其他类型的值(如
undefined
)时,会出现此错误消息


由于所有数组都有一个
reduce
函数,这意味着有时
docs
变量不是数组。在该行之前添加
console.log(docs)
,查看它是什么类型,并检查分配给它的位置,查看它是错误类型的原因。

Hmm,很有趣。我必须仔细考虑在什么情况下“docs”不会是数组。即使是一个包含1个元素的数组也应该很好,对吗?@Muirik是的,一个包含1或0个元素的数组仍然有一个
reduce
函数。嗯,很有趣。我必须仔细考虑在什么情况下“docs”不会是数组。即使是一个包含1个元素的数组也应该可以,对吗?@Muirik是的,一个包含1或0个元素的数组仍然具有
reduce
功能。