Почему мои результаты отличаются при использовании буквальной строки по сравнению с локальной переменной

У меня есть следующий цикл.

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"
}

Привет @ user142553, пожалуйста, дополните свой пост, добавив дополнительные сведения. В частности, включите исходные данные (объекты criteria и item) и явный вопрос («Почему мои результаты отличаются при использовании литеральной строки по сравнению с локальной переменной?»).

Mike Hill 26.02.2019 22:46

Может быть, вы можете предоставить скрипку того, что вы видите?

Matti Price 26.02.2019 23:06

Не совсем понятно, что вы пытаетесь здесь сделать. Можете ли вы объяснить (словами), чего этот код пытается достичь?

Phil 26.02.2019 23:20
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно изменить то, что есть myString - в настоящее время оно всегда будет равным, потому что criteria в настоящее время не входит в него. Замените myString на criteria[key]:

for (var key in criteria) {

    var myString = criteria[key];

    var exists = Object.keys(item).some(k => item[k] === myString);

}

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