Javascript KnockoutJS ArrayFirst不';I don’我没有按预期工作

Javascript KnockoutJS ArrayFirst不';I don’我没有按预期工作,javascript,knockout.js,observable,Javascript,Knockout.js,Observable,我已经在这里尝试了以下解决方案: 这: 这: 这: 但对我来说什么都不管用。我正在检查一个项目是否已经存在于可观察数组中 ko.utils.arrayForEach(self.Summary(), function (item) { var match = ko.utils.arrayFirst(self.filteredSummary(), function (a) { return a.Sku == item.Sku()

我已经在这里尝试了以下解决方案:

  • 这:
  • 这:
  • 这:
但对我来说什么都不管用。我正在检查一个项目是否已经存在于可观察数组中

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

我附上了这些值的片段: 检查声明

return item.Sku()==a.Sku()

==:等值和等类型, ==:等于

在您的情况下,两个摘要对象的值和类型必须相等。

好的,试试这个

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
            }
        });

如果这样做,问题是a.SKu是可观察的,而您没有对其进行评估!阅读我对您原始问题的评论

运行您的项目,在arrayFirst和console日志中为我们放置一个调试器:“item”和“a”,并使用snipetHi@MKougiouris updated更新您的帖子为什么a
a.Sku
是可见的<代码>=带有
项.Sku()
-值??可观察值与价值??这是错误的吗?调试时要小心。你记录的东西与你在下面比较的不同,给了你错误的信息。您正在记录ko.toJSON的结果,该结果实际上会对您隐藏传递的属性是否是可观察的,因为它将返回未包装的值。在您的示例中,如果“a.Sku”是可观察的,您将正确读取x===y,但这并不意味着a.Sku===item.Sku()。“a.Sku”将是一个函数,“item.Sku()”将是一个实际字符串!只是把这个留在这里作为将来的帮助说明