Javascript将数组拆分为多个数组

时间:2013-02-07 19:25:48

标签: javascript arrays split

使用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 个答案:

答案 0 :(得分: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/

答案 1 :(得分: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]);
        }
    }
}

答案 2 :(得分: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;
}

答案 3 :(得分:0)

感谢您的所有回复,但我设法自己解决了这个问题。当您从编程中休息一下并让您的思绪放松时,会发生什么事情。无论如何,知道我在我的数组中有三个开始,我能够编写以下代码:

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循环,这对于这种类型的系统来说效果更好。再次感谢您的回复,我希望这可以帮助其他任何尝试做同样事情的人。