Я уже пробовал решения здесь:
Но у меня ничего не работает. Я проверяю, существует ли уже элемент в наблюдаемом массиве
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, даже если при отладке было найдено совпадение.
Привет @MKougiouris обновлено
почему a.Sku можно наблюдать? == со значением item.Sku() - ?? наблюдаемое против значения ?? это неправильно?
будьте осторожны при отладке. Вы регистрируете разные вещи, отличные от того, что вы сравниваете внизу, давая вам ложную информацию. Вы регистрируете результат ko.toJSON, который на самом деле скрывает от вас, было ли переданное свойство наблюдаемым или нет, поскольку оно возвращает развернутое значение. В вашем примере, если бы «a.Sku» был наблюдаемым, вы бы правильно прочитали x === y, но это не означало бы, что a.Sku === item.Sku(). "a.Sku" будет функцией, а "item.Sku()" будет реальной строкой! просто оставив это здесь в качестве будущей справочной заметки



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проверьте заявление,
return item.Sku() === a.Sku()
=== : равное значение и одинаковый тип, == : равно,
https://www.w3schools.com/js/js_operators.asp
В вашем случае и значение, и тип двух сводных объектов должны быть равны.
Хорошо, попробуй этот
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 и консольный журнал для нас: «item» и «a» и обновите свой пост фрагментом