Оценка переменной JavaScript в карте

Может быть, вы понимаете, добавление словаря к вашим текущим данным.

    let Stage1Level1 = ["Phone","Computer,Television"]
    let Stage1Level2 = ["Horse","Shoe"]
    let Stage1Level3 = ["Milk"]

    let Stage2Level1 = ["Snow","Sun"]
    let Stage2Level2 = ["Smile","Cry","Water","Salt"]
    let Stage2Level3 = ["Five"]


    var currentStage = 1
    var currentLogo = 2

    var stageDict : [String: [String]] = [:]


    stageDict["Stage1Level1"] = Stage1Level1
    stageDict["Stage1Level2"] = Stage1Level2
    stageDict["Stage1Level3"] = Stage1Level3
    stageDict["Stage2Level1"] = Stage2Level1
    stageDict["Stage2Level2"] = Stage2Level2
    stageDict["Stage2Level3"] = Stage2Level3


  //You also can build by this way

   [[Stage1Level1, Stage1Level2, Stage1Level3], [Stage2Level1, Stage2Level2,Stage2Level3]]

   .enumerated().forEach{ stage in stage.element.enumerated().forEach{
    stageDict["Stage\(stage.offset+1)Level\([110].offset+1)"] = [110].element
    }
    }

    @IBAction func textFieldChanged(_ sender: Any) {

    if  stageDict["Stage\(currentStage)Level\(currentLogo)"]!.contains(textFieldChangedOut.text!) {
            print("Contains the value")

        }
    }
14
задан chuckg 10 April 2009 в 23:25
поделиться

4 ответа

var field = 'fooVar';
var value = 'barVar';
var postData = {};
postData[field] = value;
postData['fooString'] = 'barString';
$.post('/path/to/url', postData);

Даже если существует способ структурировать этот встроенный (как вы надеетесь для здесь ), Вам лучше делать то, что вам нужно, предварительно создав объект - см. эту статью Encosia

10
ответ дан 1 December 2019 в 14:12
поделиться

Правильно, «карта» (объект) Javascript не оценивает свои ключи. Если вам нужно оценить ключи, вы можете сделать это так:

var key = 'name';
var value = 'john';
var options = {key: value}; // translates to "key=john"

options[key] = value; // translates to "name=john"

$.post('path', options);
4
ответ дан 1 December 2019 в 14:12
поделиться

This is one possible answer.

var field = 'fooVar';
var value = 'barVar'

var data = { fooString:'barString' }
data[field] = value;

$.post('/path/to/url', data);

// Result
fooVar = barVar
fooString = barString    

Though, I'm still curious if this can be done inline (like in the original example) rather building the map beforehand.

2
ответ дан 1 December 2019 в 14:12
поделиться

Если вы настроены делать это в одном выражении, вы можете написать вспомогательную функцию, подобную следующей (непроверенный ):

function objectFromPairs() {
    var o = {};
    for (var i = 0; i < arguments.length; i += 2) {
        o[arguments[i]] = arguments[i+1];
    }
    return o;
}

$.post('/path/to/url', objectFromPairs(field, value, 'fooString', 'barString'));

Но что касается использования литерала объекта, нет, нет способа использовать значение выражения в качестве ключа. Свойства должны быть заданы как числовые литералы, строковые литералы или действительные идентификаторы (см. Стр. 41-42 спецификации ECMAscript ).

-1
ответ дан 1 December 2019 в 14:12
поделиться
Другие вопросы по тегам:

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