Фильтр Javascript был несправедливым
Я пытаюсь получить existCount из массива, который имеет идентификатор в выбранном массиве.
Но что-то пошло не так, у меня был предмет с id = 5493
но existCount.length 0
Мой код JS:
var existCount = $scope.selectedScript.filter(function (item) {
return item.id === script.script_id;
});
console.log('existCount.length ', existCount.length);
console.log('$scope.selectedScript ', $scope.selectedScript);
console.log('script.script_id ', script.script_id);
Вид консоли Chrome:
// Извините, я забыл первую строку вывода, но эта строка вверху $scope.selectedScript
и это было existCount.length = 0
Где моя вина?
Как я могу это исправить?
Спасибо!
2 ответа
+ Изменить return item.id === script.script_id;
в return item.id == script.script_id;
В вашем случае: item.id был числом, script.script_id был строкой. Вы можете видеть это в хромированной отладке по цвету, черный для строки, синий для числа.
=== это сложный способ сравнения в JS.
Вы можете увидеть на /questions/22101432/kakoj-operator-ravenstva-vs-sleduet-ispolzovat-v-sravneniyah-javascript/22101446#22101446
Так === вернуть false и элемент не добавлен в существующий счет
Если вы используете тройное равенство ===
Убедитесь, что оба сравниваемых значения имеют одинаковый тип. Я подозреваю script.script_id
это строка
Попробуйте изменить ===
в ==