设置可变长度的二维数组

时间:2011-12-27 07:36:59

标签: javascript multidimensional-array

我有一个字符串如下: 豹^粉红色,绿色,黄色|狗^热,顶部

这个字符串意味着我有2个主要块(用'|'分隔): “黑豹”和“狗” 在这两个主要块下,我有,比方说“子类别”。

我想创建一个表示(逻辑上)的二维数组,如下所示:

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

另外,我希望能够添加一个主要的块,让我们说“Cat”可能的类别“Cute,Proud”到二维数组

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

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

----------------------------- EDIT ----------------- -----------

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

    $(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”功能并没有“警告”任何东西。我做错了什么?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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 :(得分: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"]