设置一个可变长度的二维数组

Setting up a variable length two-dimensional array

本文关键字:二维数组 一个 设置      更新时间:2023-09-26

我有一个字符串如下:黑豹^粉色、绿色、黄色狗| ^热,最高

这个字符串意味着我有两个主要块(由'|'分隔):《黑豹》和《狗》在这两个主要块下面,我有,比方说"subcategories"

我想创建一个二维数组,用逻辑表示如下:

Panther(Array 1) => Pink(Element 1),Green(Element 2), Yellow(Element 3)Dog(Array 2) => Hot(Element 1), Top(Element 2)

同时,我希望能够添加一个主块,比如"猫",可能的类别为"可爱,骄傲"到二维数组

我已经设法得到一个数组包含"豹^粉红,绿色,黄色"answers"狗^热,顶部"通过使用JavaScript的分裂函数。

请注意,该字符串是通过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"并没有"警告"任何东西。我做错了什么?

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

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

是一个JavaScript对象,每个类别都有一个属性,每个类别是一个包含子类别的数组:

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

你可以这样访问它,例如,data["Dog"][1](给出"Top")。

如果你可以接受这种格式,那么你可以这样解析它:

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);

假设您正在尝试将数据解析为如下内容:

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"]

你可以这样写:

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"];