Может быть, вы понимаете, добавление словаря к вашим текущим данным.
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")
}
}
var field = 'fooVar';
var value = 'barVar';
var postData = {};
postData[field] = value;
postData['fooString'] = 'barString';
$.post('/path/to/url', postData);
Даже если существует способ структурировать этот встроенный (как вы надеетесь для здесь ), Вам лучше делать то, что вам нужно, предварительно создав объект - см. эту статью Encosia
Правильно, «карта» (объект) 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);
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.
Если вы настроены делать это в одном выражении, вы можете написать вспомогательную функцию, подобную следующей (непроверенный ):
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 ).