У меня есть объект, который возвращается как часть возвращаемых данных с сервера REST. Это часть объекта предмета.
(У меня нет контроля над сервером REST, поэтому я не могу изменить полученные данные):
{
"Option:Color":"Red,Green,Blue,Orange",
"Option:Size":"Small,Medium,Large"
}
То, что я хочу в конечном итоге, это некоторый контроль над этим, так что я могу отображать результаты, когда продукт выбран в моем приложении. Он появится в модальной форме. Я использую Marionette/Backbone/Underscore/JQuery и т.д., Но это скорее вопрос JavaScript.
Я пробовал несколько способов получить данные без успеха. Я хотел бы иметь возможность иметь параметры во вложенном массиве, но я был бы открыт для других предложений...
В принципе такая структура
var Color=('Red', 'Green', 'Blue', 'Orange')
var Size('Small', 'Medium', 'Large')
Структура объекта в порядке, просто нужно иметь возможность перевести его в массив и вынуть ключевое слово "Option"
Важно отметить, что я понятия не имею, какие могут быть разные варианты, когда я их получу - бит после параметров: может быть любая форма вариации, цвет, размер, вкус и т.д.
Прокрутите синтаксический анализ JSON и создайте новые ключи на новом объекте. Таким образом, вам не нужно создавать имена var самостоятельно; он автоматически выполняется для вас, хотя и как ключ в новом объекте.
var obj = {
"Option:Color":"Red,Green,Blue,Orange",
"Option:Size":"Small,Medium,Large"
}
function processObj() {
var newObj = {};
for (var k in obj) {
var key = k.split(':')[1].toLowerCase();
var values = obj[k].split(',');
newObj[key] = values;
}
return newObj;
}
var processedObj = processObj(obj);
for (var k in processedObj) {
console.log(k, processedObj[k])
// color ["Red", "Green", "Blue", "Orange"], size ["Small", "Medium", "Large"]
}
Edit: OP Я обновил код здесь и в jsfiddle, чтобы показать вам, как перебирать новый объект, чтобы получить ключи/значения.
newObj.Color
. Тем не менее, я всегда предпочитаю, чтобы мои ключи были строчными, поэтому я немного изменил код, чтобы отразить это. Теперь вы получите его с помощью newObj.color
. Поиграйте в jsfiddle, чтобы почувствовать это.
Попробуйте это, чтобы получить решение без жесткого кодирования всех имен опций в ваш код:
var x = {
"Option:Color":"Red,Green,Blue,Orange",
"Option:Size":"Small,Medium,Large"
};
var clean = {};
$.each(x, function(key, val){ //iterate over the options you have in your initial object
var optname = key.replace('Option:', ''); //remove the option marker
clean[optname] = val.split(","); //add an array to your object named like your option, splitted by comma
});
clean будет содержать массивы параметров, которые вы хотите создать.
EDIT: Хорошо, как вы получаете имена ваших свойств объекта, такие как "цвет", которые теперь являются ключами в вашем новом объекте? То же самое, что и раньше, в основном:
$.each(clean, function(key, val){
//key is the name of your option here
//val is the array of properties for your option here
console.log(key, val);
});
Конечно, мы снова вернемся к jQuery. ;)
var json = {
"Option:Color":"Red,Green,Blue,Orange",
"Option:Size":"Small,Medium,Large"
};
var color = json['Option:Color'].split(',');
var size = json['Option:Size'].split(',');
var Color = OptionColor.split(",");
?