Получение значения элемента списка на основе ключевых слов

В отличие от PHP, JavaScript не предоставляет доступ к массиву globals (который содержит ссылки на все объявленные имена переменных). Таким образом, JavaScript не предлагает встроенную поддержку переменных переменных. Вы можете, однако, эмулировать эту функцию, пока вы определяете все свои переменные как часть массива или объекта. Это, в свою очередь, создаст для вас массив злодеев. Например, вместо объявления переменной hello в глобальной области видимости следующим образом:

var hello = 'hello world';

давайте инкапсулируем ее внутри объекта. Мы будем называть этот объект vv (переменными переменными):

var vv = {
    'hello': 'hello world',
    //Other variable variables come here.
},
referToHello = 'hello';

Теперь мы можем ссылаться на переменную по ее индексу, и поскольку индексы массива могут быть предоставлены с использованием переменной, мы фактически используем переменная переменная:

console.log(vv[referToHello]); //Output: hello world

Ответ на ваш вопрос

Давайте применим это к коду, указанному в исходном вопросе:

    var vv = {
        'x': 'variable',
        'variable': 'hello world!'
    };
    console.log(vv[vv['x']]); //Displays "hello, world!"

A Практическое использование

Хотя предыдущий код может показаться смехотворно громоздким и непрактичным, существуют практические применения переменных переменных в JavaScript с использованием такого типа инкапсуляции. В приведенном ниже примере мы используем ту же концепцию, чтобы получить идентификатор неопределенного количества элементов HTML.

var elementIds = [],
        elements = ['message','fillOrStroke','sizePicker','colorPicker']; //The items in this array could be defined automatically via an input, database query, event, etc.
        elements.forEach( (element) => {
            elementIds[element] = document.getElementById(element);
        });

В этом примере объявляются переменные переменные (ключи в elementIds) на основе идентификатора каждого элемента , и назначит узел упомянутого элемента как значение каждой переменной. И поскольку использование глобальных переменных в JavaScript, как правило, не рекомендуется, если переменные переменные являются уникальной областью (в этом случае, объявив их внутри массива elementIds) не только аккуратно, но и более ответственным.

1
задан Yuropoor 16 January 2019 в 13:37
поделиться

3 ответа

Что-то подобное?

var myOptions = new List<string> { "Smith,John", "Doe, Bob" };
string myName = "John Smith";
var myKeywords = myName.Split(' ').ToList();

foreach (var myOption in myOptions)
{
     if (Regex.Match(myOption,$"{myKeywords[1]},\\s?{myKeywords[0]}").Success)
     {
            result = myOption;
     }
}
0
ответ дан uygar donduran 16 January 2019 в 13:37
поделиться

Ниже if может true, когда ваш John Smith точно совпадает с Smith,John.

if (MyOptions.Any(x => MyKeywords.All(y => x.Split(',').Contains(y))))
{
    check = true;
}
0
ответ дан er-sho 16 January 2019 в 13:37
поделиться

Попробуйте перебрать myOptions. Внесите изменения в свой код следующим образом-

bool check = false;
            string result = string.Empty;
            string myName = "John Smith";
            //note the space, this is intentional, as whether there is a space after the comma is inconsistent
            var myOptions = new List<string> { "Smith,John", "Doe, Bob" };
            var myKeywords = myName.Split(' ').ToList();

            foreach(string s in myOptions)
            {
                if (myKeywords.All(s.Contains))
                {
                    check = true;
                }
            }

Однако, это просто для того, чтобы дать вам представление, в этом случае вы должны протестировать все сценарии. Это будет работать, даже если запись myOptions (имя и фамилия не совпадают в точности)

0
ответ дан DevDotNet 16 January 2019 в 13:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: