Как преобразовать массив скоростей [x, y, z] в строку для хранения в базе данных? - PullRequest
0 голосов
/ 27 мая 2011

Я пытаюсь сохранить вектор скорости, объявленный так:

 me.vel = [0, 0, 0];

в базе данных MySQL.Я предполагаю, что это должно быть преобразовано в строку, прежде чем она может быть сохранена, но это потому, что я не знаю какого-либо подходящего типа, чтобы сохранить его как, например: VARCHAR, INT, STRING и т. Д. (Если это может быть сохранено, давайтея знаю, какой тип, поскольку это было бы более простым решением, и мне не пришлось бы преобразовывать в строку, а затем обратно в вектор)

Я пробовал:

 var velocityString = me.vel.join();
 var velocityString = String(me.vel);

, но тепохоже, не работает.

Как я могу преобразовать этот массив в строку?

Спасибо, Digimas

Ответы [ 6 ]

2 голосов
/ 27 мая 2011

Или вы можете json кодировать объект.

2 голосов
/ 27 мая 2011

Почему бы не сохранить данные в виде трех отдельных столбцов?vel_x, vel_y, vel_z (возможно, DOUBLE).Это намного чище и избавит вас от необходимости постоянно преобразовывать строки в / из строк.

1 голос
/ 27 мая 2011

Если (и я не думаю, что это так) значения элемента скорости фиксированы, вы можете использовать один из MySQL SET или ENUM типов данных для хранения массива.

В противном случае я бы пошел на JSON и сохранил кодированную строку JSON.Che в поле VARCHAR (если вы не храните скорости света) 1 :

/* Store:    */ JSON.encode([1,2,3]);            //=> "[1,2,3]"
/* Retrieve: */ JSON.parse(velocityFromSQL); //=> [1,2,3]

1 VARCHAR может содержать до 255 символов

1 голос
/ 27 мая 2011

Оба решения, которые вы пробовали, должны работать.Я получаю «0,0,0» для обоих.Но, как предлагал Кристофер, JSON-кодирование будет работать, и, на мой взгляд, это лучшее решение.присоединение или строковое создание просто создать список с разделителями-запятыми, который с одним примером, как это было бы хорошо.Но если вы делаете что-то более сложное, вы теряете смысл из своих данных (скажем, если ваш массив не только числа). Поэтому, если доступны JSON.stringify / parse, используйте это, в противном случае [0,0,0] .join (", ") /" 0,0,0 ".split (", ") будет работать.

0 голосов
/ 27 мая 2011
var vel = [0, 0, 0];
var vel_string = vel.join('|');

Дает вам 0|0|0

Затем сделать его массивом, если у вас есть строка из базы данных:

var vel_string = '0|0|0';
var vel = vel_string.split('|');
for(var i in vel) {
    vel[i] = parseInt(vel[i]);
}
0 голосов
/ 27 мая 2011

Я бы сделал var velString = me.vel.join(',');, если вы хотите, чтобы это была строка.

Чтобы преобразовать его обратно:

var vel = velString.split(',');

for (var i = 0; i < vel.length; i++) {
    vel[i] = parseFloat(vel[i]);
}

В качестве альтернативы, если вы знаете, что ваши пользователи будут использовать только современные браузеры:

var vel = velString.split(',').map(parseFloat)

Я не могу комментировать более подходящий тип данных в MySQL. Кажется, что три числовых столбца могли бы иметь больше смысла, если вы не собираетесь записывать более высокие скорости в будущем.

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