Как мне динамически создать многомерный массив JavaScript - PullRequest
2 голосов
/ 03 декабря 2010

Я пытаюсь динамически создать массив javascript, где _tags - это глобально определенный массив, а затем отправить его в php через запрос ajax.В основном, мне нужен uid в качестве ключа и x, y в качестве подмассива.в php это выглядело бы примерно как

$arr[$uid] = array('x'=>$x,'y'=>$y); 

, но у меня возникли проблемы с вычислением такого массива в javascript, вот что у меня есть

function add_tag_queue(uid,x,y){

    var arr = new Array(3);
    arr[0] = uid;
    arr[1] = x;
    arr[2] = y;

    _tags.push(arr);
}

Ответы [ 5 ]

4 голосов
/ 03 декабря 2010

Это работает нормально, если в массив добавляется только одна запись, я добавляю несколько значений, другими словами, функция будет запускаться несколько раз, а затем я хочу отправить весь этот массив,но это, кажется, просто добавляет все с помощью разделителя запятых.

Я не уверен, что именно вы говорите здесь.Во втором примере, который я ранее приводил, предполагается, что для каждого uid существует одна пара x, y, но нет ограничений на количество uid s в _tags.Вот почему var _tags = {}; является нашей стороной функции - поэтому это глобальная переменная.

Следующие модификации позволят вам иметь несколько пар x, y для каждой uid:

function add_tag_queue(uid,x,y){

   /* 
    * detect if _tags[uid] already exists with one or more values 
    * we assume if its not undefined then the value is an array... 
    * this is similar to doing isset($_tags[$uid]) in php
    */
   if(typeof _tags[uid] == 'undefined'){
     /* 
      * use an array literal by enclosing the value in [], 
      * this makes _tags[uid] and array with eah element of 
      * that array being a hash with an x and y value
      */
     _tags[uid] = [{'x':x,'y':y}]; 
   } else {
     // if _tags[uid] is already defined push the new x,y onto it
     _tags[uid].push({'x':x, 'y':y});
   }
}

Это должно работать:

function add_tag_queue(uid,x,y){

    _tags.push([uid, x,y]);
}

, если вы хотите uid в качестве ключа, тогда вам нужно использовать объект / хеш, а не array

var _tags = {}; // tags is an object
function add_tag_queue(uid,x,y){

        _tags[uid] = {'x':x,'y':y};
    }
0 голосов
/ 03 декабря 2010

Так я создаю многомерные массивы в JS.Надеюсь, это поможет.

var arr= [];
arr[uid] = new Array();
arr[uid]["x"] = xvalue;
arr[uid]["y"] = yvalue;
0 голосов
/ 03 декабря 2010

Это выглядит очень похоже на приведенный вами пример PHP:

function add_tag_queue(uid,x,y){
    _tags[uid] = {x: x, y: y};
}
0 голосов
/ 03 декабря 2010

Вы хотите реализовать ассоциативный массив в Javascript. Хотя Javascript не поддерживает ассоциативные массивы, объекты Javascript могут обрабатываться практически одинаково.

Попробуйте вместо этого:

_tags = {}

function add_tag_queue(uid,x,y){
    _tags[uid] = {x:x, y:y};
}

_tags теперь объект, и вы добавите новый объект по ключу uid. Аналогично, пара x, y сохраняется в объекте. Первый x - это ключ, а второй - значение. Чтобы уточнить, вы могли бы написать это так:

function add_tag_queue(uid,xValue,yValue){
    _tags[uid] = {x:xValue, y:yValue};
}
0 голосов
/ 03 декабря 2010

Вы всегда можете просто собрать его в php и json_encode его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...