Поиск строки в массиве строк с использованием условия AND

Как сделать так, чтобы includes() в some() соответствовало всем случаям?

let instance = ['m6gd.medium', '1 vCPU', '4 GiB'];

// let search = "medium"; // true
// let search = "4gb"; // true
// let search = "medium 4gb"; // true
let search = "medium 12gb"; // true - need to make this false - need AND condition

let found = instance.some(s1 =>
{
    console.info("s1 = ", s1.toLowerCase());

    let search_term = search.toLowerCase();
    search_term = search_term.replace(/gb/g, "gib");
    search_term = search_term.replace(/(\d+)(gib)/g, "$1 $2");

    console.info("search_term = ", search_term);

    return search_term.split(' ').some(s2 =>
        {
            console.info("s2 = ", s2.toLowerCase(), "\n");
            return s1.toLowerCase().includes(s2.toLowerCase())
        });
});

console.info(found);
every вместо some
zenly 31.03.2023 15:43
Поведение ключевого слова "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) для оценки ваших знаний,...
0
1
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Используйте array.foreach для разделенного поискового термина и в обратном вызове для проверки array.foreach, что вызов некоторой функции в стоге сена возвращает true. вот как бы я это сделал.

let instance = ["m6gd.medium", "1 vCPU", "4 GiB"];

// let search = "medium"; // true
// let search = "4gb"; // true
// let search = "medium 4gb"; // true
let search = "medium 12gb"; // true - need to make this false - need AND condition

let search_term = search.toLowerCase();
search_term = search_term.replace(/gb/g, "gib");
search_term = search_term.replace(/(\d+)(gib)/g, "$1 $2");


let notFound = false;
//false for now, but we will split search term, 
//then perform array.foreach on each split item to see if it is contained in instance array. If so, this becomes true

search_term.split(" ").forEach(el => {
  if (!instance.some(s => {
    return s.toLowerCase().includes(el.toLowerCase())
  }))
  {
    notFound = true;
  }
})


console.info(!notFound);

Спасибо за вопрос, действительно, похоже, есть способ без foreach, он также может работать быстрее. Я недостаточно опытен, чтобы знать, но вот код:

let instance = ["m6gd.medium", "1 vCPU", "4 GiB"];

// let search = "medium"; // true
// let search = "4gb"; // true
// let search = "medium 4gb"; // true
let search = "medium 12gb"; // true - need to make this false - need AND condition

let search_term = search.toLowerCase();
search_term = search_term.replace(/gb/g, "gib");
search_term = search_term.replace(/(\d+)(gib)/g, "$1 $2");

let result = compare(search_term.split(" "), instance)


function compare(searchArray, comparisonArray) {
  // Convert all items in the comparison array to lowercase
  const comparisonArrayLowercase = comparisonArray.map((item) => item.toLowerCase());

  // Check if every item in the search array is a substring of at least one item in the comparison array
  return searchArray.every((searchItem) =>
    comparisonArrayLowercase.some(
      (comparisonItem) => comparisonItem.includes(searchItem.toLowerCase())
    )
  );
}

console.info(result);

Спасибо за ваше решение - я думал, что теперь это можно решить с помощью функций ES2022 или чего-то еще вместо использования цикла forEach.

anjanesh 31.03.2023 16:58

Нет проблем, я только что узнал, что вы можете сделать это без foreach, и обновил свой ответ, чтобы показать, как вместо этого использовать методы Array.prototype.every() и Array.prototype.some()

shadeboy 31.03.2023 17:31

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