2011-12-27 17 views
0

の設定次のように私は、文字列を持っている: パンサー^ピンク、グリーン、イエロー|犬^熱い、トップ可変長2次元配列

は、この文字列は、私は2つの主要なブロック(区切ら」を持っていることを意味| '): 「パンサー」と「犬」 この2つの主要なブロックの下で、私は「サブカテゴリ」と言うことができます。

Iは次のように(論理で)で表される2次元配列を作成したい

パンサー(配列1)=>ピンク(要素1)、緑(要素2)、イエロー(要素3) Dog(Array 2)=> Hot(Element 1)、Top(Element 2)

また、メインブロックを追加できます。 2次元配列

JavaScriptの分割機能を使用して、「Panther^Pink、Green、Yellow」と「Dog^Hot、Top」を含む配列を取得できました。

この文字列はAjax経由で受信され、任意の長さにすることができますが、上記の形式が常に使用されます。

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

[OK]を、私のスクリプトは、これまでのところです。しかし

$(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

+0

連想配列を使って上記を達成できれば、私は単純な2次元配列を好んでいますが。 – dinchakpianist

+1

"単純な2次元配列"については説明していません。単純な1次元配列である要素で構成される連想配列について説明しています。 JavaScriptのアソシエイティブな配列と同等のものが「オブジェクト」です。これは私が私の答えで使用したものです(techfoobarもオブジェクトを使用していますので、ほぼ同じ回答を投稿するのに数秒かかります)。シンプルな2次元配列を使用すると、 "Panther"キーと "Dog"キーが失われたり、各サブアレイの最初の要素としてそれらが終わったりします。 – nnnnnn

答えて

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

あなたが好きなものを使用することができます

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

を使用することができ、リストに別の項目を追加するには::parseInput('Panther^Pink,Green,Yellow|Dog^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; 
} 

をあなたと仮定すると

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]と言ってアクセスしてください( "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);