Nodejs indexOf конкретного числа

Этот код:

var t = "test 55";
t.indexOf("5") !== -1

Вывод истина,

Но этот код:

var t = "test 55";
t.indexOf("5") !== -1

Также выведите true,

Как мне сделать так, чтобы он выводил только истинное значение, когда это точно такое же число, вот так:

var t = "test 55";
t.indexOf("5") !== -1

Выход: ложь,

var t = "test 5";
t.indexOf("5") !== -1

Вывод true.


indexOf получит первый индекс строки или массива, который соответствует заданному входу. Не могли бы вы дать больше контекста по вашему варианту использования. Потому что вы можете использовать строгое равенство для сравнения точных чисел / строк. например. «5» === «5», который вернет истину, но ложь на «55» === «5»

Sunny Wong 20.11.2018 15:29
Поведение ключевого слова "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) для оценки ваших знаний,...
2
1
169
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Значение в двойных или одинарных кавычках рассматривается JavaScript как строковый тип. Следовательно, то, что на самом деле делает indexOf, - это поиск подстроки («5») внутри строки («55»).

Я не уверен, почему вы пытаетесь использовать indexOf для сравнения чисел, разве вы не можете просто использовать:

var t = "55";
t == 5 //false
t == "55" // true
t == "5" // false

Обратите внимание, что я использовал ==, а не ===. Использование == преобразует значения в те же типы (в случае t = "55" в строку) и сравнит их.

РЕДАКТИРОВАТЬ

Поскольку op пояснил, что значение t содержит как числа, так и буквы, то для проведения сравнения необходима дополнительная логика.

  1. Извлечь число из строки.
  2. Сравните это с указанным числом.

Вы можете добиться этого с помощью функции:

function compare(number, stringWithNumber) {
  // slice string with number to get a string starting with a number
  const stringStartingWithNumber = stringWithNumber.slice(stringWithNumber.search(/\d/));
  return parseFloat(stringStartingWithNumber) == number; // parseFloat removes the rest of the string and parses found number as float
}

Потом:

compare("5", "55") // false
compare("5", "5") // true
compare("5", "sometext 55") // false
compare("5", "sometext 5") // true

Обратите внимание, что функция сравнивает предоставленное число только с первым числом, которое она находит в аргументе stringWithNumber.

Это был всего лишь пример, фактическое значение t также содержит буквы t1 = "test 5" t2 = "test 55" t3 = "test 5.5"

RookieNeedingHelp 20.11.2018 15:38

.indexOf() не подходит для того, что вы хотите. Вы можете использовать .search() (тем более, что исходная версия вашего вопроса имела тег ) .
Вы явно не указали, что должен давать 5.5, поэтому я приведу два выражения: первое, более простое, /\b5\b/ соответствует ему, а второе, более сложное, /(^|[^.])\b5\b(?!\.)/ - нет. Исключение десятичной точки стало асимметричным до и после 5, потому что я отказался от использования утверждения lookbehind, которое поддерживается только с ECMAScript 2018 и далее.

t = ["5", "test 5", "test 55", "test 5.5"]
console.info('with regex '+/\b5\b/)
for (i in t)
  console.info(t[i], t[i].search(/\b5\b/) !== -1)
console.info('with regex '+/(^|[^.])\b5\b(?!\.)/)
for (i in t)
  console.info(t[i], t[i].search(/(^|[^.])\b5\b(?!\.)/) !== -1)

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