2012-03-05 2 views
0

Я пытаюсь разбить цепочку целых чисел на массив в JavaScript.Разделение строки целых чисел на массив - элементы не распознаются

Первоначально я имел:

m.rows[7] = new Array (8,11); 

И я меняю его:.

var nearby = nearby.split(","); 
m.rows[7] = new Array (nearby); 

(И установив переменную с соответствующими числами, разделенными запятой в моем редакторе уровней При печати «Рядом с [0]» на консоли я получаю «8». Когда я печатаю «рядом [1]» на консоли, я получаю 11)

Однако у меня есть этот код, в котором я пытаюсь сопоставить один из элементы в е массив с элементом другого массива:

for (var i = m.rows[id].length-1; i >= 0; i--) { 
     // If the loop finds an element ID that matches the ID of the last element in the path array, do this: 
     console.log('test nearby 2: ' + m.rows[id][i]); 
     if (m.rows[id][i] == this.path_array[this.path_array.length-1].id) { 
      // Loop through the one array 
      for (var j = all_nodes.length-1; j >= 0; j--){ 
       // If the ID of one of one of these entities matches the id of the instance that was just clicked 
       if (all_nodes[j].id == id) { 

        // Activate that node: 
        all_nodes[j].active = true; 
       } 
      } 
      break; 
     } 

Когда я на самом деле поставить «8,11» в массив выше вручную выше работает отлично. Однако, когда я пытаюсь использовать «рядом», который я разделяю на массив, это не так. И распечатав его на консоли в «test near 2» выше, когда я использую «рядом», «8,11» печатается. Когда я вручную вводим «8,11» в этот массив, я получаю «11».

Я довольно новичок в JavaScript, поэтому мне, вероятно, не хватает чего-то чрезвычайно очевидного здесь - может ли кто-нибудь пролить свет?

Спасибо!

+0

Непонятно, что такое 'рядом' на самом деле; Это строка с запятыми? Если да, обратите внимание, что при расщеплении это приведет к строкам, а не фактическим 'Number'. Это * может быть хорошо, потому что JS будет делать преобразование типов, но это зависит от порядка операций. Легче/безопаснее просто делать их номера после раскола. –

+0

Dave, Рядом была строка с запятыми, как вы можете предположить. Ответ Minitech ниже помог мне сделать то, что я пытался :) – spectralbat

ответ

1

Это не так, как массивы работы. В new Array(8, 11), 8 и 11 указаны параметры . В new Array(nearby), nearby является параметр. Однако для достижения требуемой функциональности это довольно просто; nearby уже массив, так что просто назначить его:

m.rows[7] = nearby; 

Или, если тип вас беспокоит:

m.rows[7] = [parseInt(nearby[0], 10), parseInt(nearby[1], 10)]; 

Обратите внимание, что здесь я использовал массив буквальный синтаксис, []. [a, b] в основном эквивалентен new Array(a, b), и вы можете использовать буквенный синтаксис, когда это возможно по различным причинам.

+0

Спасибо! Это сработало отлично. – spectralbat

1

nearby - это уже массив. Нет причин для звонка new Array(anArray). И на самом деле, вы не должны, так как это не так, как вы думаете.

EDIT:

Вот скрипка, которая иллюстрирует эту проблему. Обратите внимание, что первый элемент массива на самом деле представляет собой массив, содержащий оба элемента, а не только первый элемент.

http://jsfiddle.net/V7QLN/

Смежные вопросы