2013-02-07 3 views
1

J'ai un peu de mal à utiliser javascript pour diviser un tableau en multi-array. Par exemple, j'ai ce tableau:Javascript split array into multi array

[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 

Ce que je voudrais faire est de diviser les périodes, et créer un tableau encore plus comme ceci:

[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 

J'ai essayé à peu près tout ce qui Je peux penser et je ne peux pas sembler trouver un code qui fonctionne :(:(S'il vous plaît aidez-moi

+0

Les numéros sont-ils des chaînes ou des nombres? Testez 'if (~~ x! == x)' pour _Number_ et 'x.indexOf ('.')' Pour _String_. –

+0

Le code que vous avez posté n'est pas (valide) javascript. Je ne connais pas tous les langages de programmation mais je pense que ce n'est pas une syntaxe valide dans aucune langue. Puisque votre question concerne javascript: pourriez-vous afficher le code javascript pour clarifier votre question? – Flauwekeul

+0

@PaulS .: Est-ce supposé faire une conversion en nombre entier de 32 bits? Testez simplement 'typeof x' – Bergi

Répondre

0

merci pour toutes vos réponses, mais j'ai réussi à comprendre par moi-même. C'est incroyable ce qui arrive quand vous prenez une pause dans la programmation et que vous vous sentez à l'aise. Quoi qu'il en soit, en sachant que j'ai trois prévoit commencer dans mon tableau, j'ai pu écrire le code suivant:

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("."); 
     } 
    } 
    } 
} 

Au début, j'ai essayé d'utiliser des boucles while, mais qui a exigé beaucoup plus de code et a été beaucoup plus déroutant. Puis j'ai commencé à utiliser la boucle for qui fonctionne beaucoup mieux pour ce type de système. Merci encore pour vos réponses et j'espère que cela aidera tous ceux qui essaient de faire la même chose.

0

ce n'est pas une solution complète, mais j'utiliser cette fonction pour accomplir quelque chose comme vous décrivez.

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

Cela devrait fonctionner

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 Fiddle ici: http://jsfiddle.net/gER22/

0

Est-ce que cette aide?

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; 
}