【发布时间】:2019-03-18 15:42:25
【问题描述】:
我遇到了一个问题,我有一个包含神秘重复项的数组。
在firebase中,我的对象包含数组
{
ink_colors:
0: 'Mauve',
1: 'Mineral',
2: 'Mocha',
3: 'Navy'
}
Firebase 网络控制台:
当我的 React 应用接收到对象时,控制台会报告
console.log(snapshot.val().ink_colors);
> Array(4) [ "Mauve", "Mineral", "Mocha", "Navy" ]
但是
当访问数组时,它显然有 6 个项目
temp1.ink_colors
// => [ "Mauve", "Mineral", "Mocha", "Navy", "Mauve", "Mauve" ]
尝试使用控制台日志和调试器调试此问题,我将控制台输出保存在全局变量 temp1 中,并得到两个不同的结果:
function receive(payload){
console.log(payload);
debugger;
}
> payload.ink_colors
< (4) ["Mauve", "Mineral", "Mocha", "Navy"]
> temp1.ink_colors
< (6) ["Mauve", "Mineral", "Mocha", "Navy", "Mauve", "Mauve"]
这告诉我问题是 不是具有意外空数组值的典型 firebase 数组陷阱。
NPM 包:
反应:16.8.2
redux:4.0.1
火力基地:5.7.2
【问题讨论】:
-
还有别的东西在访问它,设置它吗?如果不查看更多代码,很难知道发生了什么。
-
我似乎很清楚,在您记录数组之后,有些东西正在添加两个额外的
"Mauve"条目。单行log输出显示了记录时存在的数组,而该条目的扩展显示了扩展时的数组。在您记录它和展开它的时间之间,该数组正在获得额外的条目。我怀疑如果不查看更多代码,就不可能说出执行这些不需要的添加的原因。 -
你应该代理你的数组并调试一个调用的方法。
-
我们缺少重现问题的完整代码。告诉我们它在一个地方是正确的,但在另一个地方不正确是一个很好的问题陈述,但不足以帮助您。尝试在任何人都可以轻松运行的单个独立代码中重现该问题。见how to create a minimal, complete, verifiable example。
-
请参阅this fiddle 以获取上述@apsillers 评论的演示。控制台记录一个五项数组,展开显示六项。
标签: javascript arrays firebase