Фильтр 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 это строка

Попробуйте изменить === в ==

Другие вопросы по тегам