0

我有一个对象作为来自 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')

Object 结构很好,只需要能够将其转换为数组并取出 'Option' 关键字即可

重要的是,当我收到它们时,我不知道不同的选项可能是什么 - 选项之后的位:可能是任何形式的变化、颜色、大小、风味等。

4

3 回答 3

2

遍历解析的 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"]
}

编辑:OP 我在这里和 jsfiddle 中更新了代码,向您展示如何遍历新对象以获取键/值。

小提琴

于 2013-11-14T11:14:27.343 回答
1

尝试这样做以获得解决方案,而无需将所有选项名称硬编码到您的代码中:

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 将包含您要创建的选项数组

编辑:好的,您如何获得对象属性的名称,例如“颜色”,它们现在是新对象中的键?基本上和以前一样,基本上:

$.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。;)

于 2013-11-14T11:07:44.183 回答
1
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(',');
于 2013-11-14T11:04:59.720 回答