2011-12-27 70 views
0

我有一个字符串如下: 豹^粉红色,绿色,黄色|狗^热,顶设置一个可变长度的二维阵列

此字符串意味着我有2个主块(由一个'分离|'): “豹”和“狗” 在这两个主要的块,我有,让我们说“子类”。

我想创造表示的2维阵列(在逻辑)如下:

豹(阵列1)=>粉红(要素1),绿(要素2),黄色(要素3) 狗(阵列2)=>热(元素1),顶部(元素2)

另外,我想能够添加一个主块,让可以说“猫”与可能的类别“可爱,骄傲”二维数组

通过使用JavaScript的分割函数,我设法得到了一个包含“Panther^Pink,Green,Yellow”和“Dog^Hot,Top”的数组。

请注意,该字符串通过Ajax接收,并且可以是任意长度,但始终使用上面显示的格式。

-----------------------------编辑---------------- ------------

好了,我的脚本到目前为止是:

$(document).ready(function(){ 
     appFunc.setNoOfAppBlock('Panther^Pink,Green,Yellow|Dog^Hot,Top'); 
     appFunc.alertPing(); 
    }); 


    var appFunc = (function(stringWithSeper) { 
     var result = {}, 
      i, 
      categories = new Array(), 
      subcategories; 

     return { 
      setNoOfAppBlock: function(stringWithSeper){ 
       categories = stringWithSeper.split("|"); 
       for (i = 0; i < categories.length; i++) { 
        subcategories = categories[i].split("^"); 
        result[subcategories[0]] = subcategories[1].split(","); 
       } 
      }, 
      alertPing: function(){ 
       alert(result["Panther"][1]); 
      } 
     }; 
    })(); 

但是,函数 “alertPing” 是不是 “警报” anything.What上午我是做错了?

+0

你是一个关联数组,即哈希:

如果该格式是您可以接受如下,那么你可以分析它? – nikhil 2011-12-27 07:42:50

+0

如果以上可以使用关联数组来实现,那么,是的..虽然我更喜欢简单的二维数组。 – dinchakpianist 2011-12-27 07:49:04

+1

你并没有描述“简单的二维数组”,而是描述了一个由简单的一维数组构成的关联数组。 JavaScript的等价关联数组就是“对象”,这是我在我的回答中所使用的(我看到techfoobar也使用了一个对象,几秒钟后我就打了几乎相同的答案)。如果你使用一个简单的二维数组,那么你要么丢失“Panther”和“Dog”键,要么你最终将它们作为每个子数组的第一个元素 - 是你想要的吗? – nnnnnn 2011-12-27 08:06:26

回答

1

假设你试图将您的数据解析为如下内容:

var result = { 
    Panther: ["Pink", "Green", "Yellow"], 
    Dog: ["Hot", "Top"] 
} 

您可以使用string.split()到您的字符串分解成子阵:

var str = "Panther^Pink,Green,Yellow|Dog^Hot,Top"; 
var result = {}, temp; 
var blocks = str.split("|"); 
for (var i = 0; i < blocks.length; i++) { 
    temp = blocks[i].split("^"); 
    result[temp[0]] = temp[1].split(","); 
} 

然后数据可以被添加到数据结构是这样的:

result["Cat"] = ["Cute", "Proud"]; 

数据可从读取数据结构如下:

var dogItems = result["Dog"]; // gives you an array ["Hot", "Top"] 
1

您可以使用类似:

function parseInput(_input) { 
    var output = []; 
    var parts = _input.split('|'); 
    var part; 
    for(var i=0; i<parts.length; i++) { 
    part = parts[i].split('^'); 
    output[part[0]] = part[1].split(','); 
    } 
    return output; 
} 

调用parseInput('Panther^Pink,Green,Yellow|Dog^Hot,Top');将返回:

output [ 
"Panther" => [ "Pink", "Green", "Yellow" ], 
"Dog" => [ "Hot", "Top" ] 
] 

要将其他项目添加到列表中,你可以使用:

output["Cat"] = ["Cute", "Proud"]; 
2

对我来说,你的数据最合乎逻辑的表示:

Panther^Pink,Green,Yellow|Dog^Hot,Top 

是与每一类,每一个与子类别数组的属性JavaScript对象:

var data = { 
    Panther : ["Pink", "Green", "Yellow"], 
    Dog  : ["Hot", "Top"] 
} 

你会然后通过说,例如,data["Dog"][1](给出“顶部”)来访问。

function parseData(data) { 
    var result = {}, 
     i, 
     categories = data.split("|"), 
     subcategories; 

    for (i = 0; i < categories.length; i++) { 
     subcategories = categories[i].split("^"); 
     result[subcategories[0]] = subcategories[1].split(","); 
    } 

    return result; 
} 

var str = "Panther^Pink,Green,Yellow|Dog^Hot,Top"; 
var data = parseData(str);