1

JavaScript を使用して配列をマルチ配列に分割するのに少し問題があります。たとえば、次の配列があります。

[0] => object
   [0] => object
      [0] => The Letter P
      [1] => 5.5
   [1] => object
      [0] => 5
      [1] => 1.1
      [2] => 5
      [3] => 1
      [4] => 1
   [2] => object
      [0] => 5
      [1] => 1.1.1
      [2] => 1.1.1
      [3] => 1.1.1
      [4] => 3

私がやりたいことは、期間を分割し、次のようなさらに深い配列を作成することです:

[0] => object
    [0] => object
       [0] => The Letter P
       [1] => object
          [0] => 5
          [1] => 5
    [1] => object
       [0] => 5
       [1] => object
          [0] => 1
          [1] => 1
       [2] => 5
       [3] => 1
       [4] => 1
    [2] => object
       [0] => 5
       [1] => object
          [0] => 1
          [1] => 1
          [2] => 1
       [2] => object
          [0] => 1
          [1] => 1
          [2] => 1
       [3] => object
          [0] => 1
          [1] => 1
          [2] => 1
       [4] => 3

考えられることはすべて試してみましたが、機能するコードが見つからないようです:(助けてください:(

4

4 に答える 4

2

これはうまくいくはずです

function dotsToArr(arr) {
    for(var x = 0; x < arr.length; x++) {
        if(typeof(arr[x]) != "object") {
            var parts =  (arr[x]+"").split(".");
            if(parts.length > 1) {
                arr[x] = parts;
            }

            continue;
        }

        dotsToArr(arr[x]);
    }
}

JS フィドルはこちら: http://jsfiddle.net/gER22/

于 2013-02-07T19:43:58.363 に答える
0

完全な解決策ではありませんが、この関数を使用して、あなたが説明しているようなことを達成しています。

function parseStringToArray(inputString){
    var parts = inputString.split(".");
    var arr = [];
    while (parts.length){
        arr.push(parts.shift());
    }
    return arr;
}
function parseArray(inputArray){
    var arrayLength = inputArray.length;
    for (var i = 0; i < arrayLength; i++){
        if (inputArray[i].indexOf('.'){
            inputArray[i] = parseStringToArray(inputArray[i]);
        }
    }
}
于 2013-02-07T19:32:48.553 に答える
0

これは役に立ちますか?

var toString = Object.prototype.toString;

function parseArray(obj) {
    var i, l;

    if (toString.call(obj) === "[object Number]") {
        obj += "";
    }

    if (toString.call(obj) === "[object String]" && obj.indexOf(".") !== -1) {
        obj = obj.split(".");
    }

    if (toString.call(obj) === "[object Array]") {
        for (i = 0, l = obj.length; i < l; i++) {
            obj[i] = parseArray(obj[i]);
        }
    }

    return obj;
}
于 2013-02-07T19:57:41.727 に答える
0

すべての回答に感謝しますが、私は自分でそれを理解することができました。プログラミングから離れて心を落ち着けると、驚くべきことが起こります。とにかく、配列内で開始する 3 つのレイがあることを知っていたので、次のコードを書くことができました。

for(a = 0; a < array.length; a++){
  for(var b = 0; b < array[a].length; b++){
    for(var c = 0; c < array[a][b].length; c++){
      if(array[a][b][c].indexOf(".") > 0){
        array[a][b][c] = array[a][b][c].split(".");
      }
    }
  }
}

最初は while ループを使用してみましたが、それにはさらに多くのコードが必要であり、さらに混乱を招きました。それから、このタイプのシステムではずっとうまく機能する for ループを使い始めました。返信ありがとうございます。これが同じことをしようとする他の人の助けになることを願っています。

于 2013-02-07T22:08:17.043 に答える