У меня есть следующий цикл.
for (var key in criteria) {
var exists = Object.keys(item).some(function(k) {
return item[k] === "Test";
})
}
Это работает отлично. И я получаю 15 trues в зависимости от количества предметов. Однако, если я изменю его на следующее:
for (var key in criteria) {
var myString = item[key];
var exists = Object.keys(item).some(function(k) {
return item[k] === myString;
});
}
Если я знаю, что item[key] в какой-то момент моего цикла будет равнозначно «Тесту», это не даст такого же результата. На самом деле он возвращает все trues,
Критерии — это объект, который выглядит следующим образом:
{
habitat_type: "Mangroves",
issue_specific_terms: "Test"
}
Item также является объектом, например:
{
habitat_type: "Streams and rivers",
cci: "Low productivity/loss of agriculture",
intervention_type: "Restoration",
issue_specific_terms: "Test",
country: "United States of America"
}
Может быть, вы можете предоставить скрипку того, что вы видите?
Не совсем понятно, что вы пытаетесь здесь сделать. Можете ли вы объяснить (словами), чего этот код пытается достичь?



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


Вам нужно изменить то, что есть myString - в настоящее время оно всегда будет равным, потому что criteria в настоящее время не входит в него. Замените myString на criteria[key]:
for (var key in criteria) {
var myString = criteria[key];
var exists = Object.keys(item).some(k => item[k] === myString);
}
Привет @ user142553, пожалуйста, дополните свой пост, добавив дополнительные сведения. В частности, включите исходные данные (объекты
criteriaиitem) и явный вопрос («Почему мои результаты отличаются при использовании литеральной строки по сравнению с локальной переменной?»).