Настройка двумерного массива переменной длины - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть следующая строка: Panther ^ розовый, зеленый, желтый | Собака ^ Горячая, Top

Эта строка означает, что у меня есть 2 основных блока (разделенных '|'): "Пантера" и "Собака" Под этими двумя основными блоками у меня, скажем, «подкатегории».

Я хотел создать двумерный массив, представленный (в логике) следующим образом:

Пантера (Массив 1) => Розовый (Элемент 1), Зеленый (Элемент 2), Желтый (Элемент 3) Dog (Array 2) => Hot (Элемент 1), Top (Элемент 2)

Кроме того, я хочу иметь возможность добавить основной блок, скажем, «Cat» с возможными категориями «Cute, Proud» в двумерный массив

Мне удалось получить массив, содержащий «Panther ^ Pink, Green, Yellow» и «Dog ^ Hot, Top» с помощью функции разделения 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» ничего не «предупреждает». Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 27 декабря 2011

Для меня наиболее логичное представление ваших данных:

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 голос
/ 27 декабря 2011

Предполагая, что вы пытаетесь проанализировать ваши данные примерно так:

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 голос
/ 27 декабря 2011

Вы можете использовать что-то вроде:

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"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...