我有一个字符串如下: 豹^粉红色,绿色,黄色|狗^热,顶部
这个字符串意味着我有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”功能并没有“警告”任何东西。我做错了什么?
答案 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"]