Это работает нормально, если в массив добавляется только одна запись, я добавляю несколько значений, другими словами, функция будет запускаться несколько раз, а затем я хочу отправить весь этот массив,но это, кажется, просто добавляет все с помощью разделителя запятых.
Я не уверен, что именно вы говорите здесь.Во втором примере, который я ранее приводил, предполагается, что для каждого 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};
}