【发布时间】:2019-12-03 12:38:27
【问题描述】:
我已经尝试过这里的解决方案:
- 这个:knockout arrayfirst not working as expected
- 这个:ko.utils.arrayFirst always returns null when not handling else block with non-empty string
- 这个:Knockout Check If Existing in observableArray before Push
但是对我没有任何作用。我正在检查一个项目是否已经存在于可观察数组中
ko.utils.arrayForEach(self.Summary(), function (item) {
var match = ko.utils.arrayFirst(self.filteredSummary(), function (a) {
return a.Sku == item.Sku()
});
if (!match) {
// Do push
}
});
我做错了吗?即使在调试时,它也总是返回 null。
【问题讨论】:
-
运行您的项目,在 arrayFirst 中放置一个调试器,并为我们提供控制台日志:“item”和“a”,并使用片段更新您的帖子
-
嗨@MKougiouris 更新
-
为什么
a.Sku是可观察的?==和item.Sku()- 值 ??可观察与价值 ??这是错的吗? -
调试时要小心。您记录的内容与您在下面比较的内容不同,从而为您提供虚假信息。您正在记录 ko.toJSON 的结果,无论传递的属性是否是可观察的,它实际上都会对您隐藏,因为它将返回未包装的值。在您的示例中,如果“a.Sku”是可观察的,您将正确读取 x === y,但这并不意味着 a.Sku === item.Sku()。 “a.Sku”是一个函数,而“item.Sku()”是一个实际的字符串!只是将其留在这里作为将来的帮助说明
标签: javascript knockout.js observable