Подтвердить что ты не робот

Javascript array как список строк (сохранение котировок)

У меня есть массив строк. Когда я использую .toString() для вывода, кавычки не сохраняются. Это затрудняет сбор mysql-запроса с помощью "in". Рассмотрим следующее:

SELECT * FROM Table WHERE column IN ('item1','item2','item3','item4')

toString is returning: IN (item1,item2,item3,item4)

Здесь должно быть простое исправление.

4b9b3361

Ответ 1

Кавычки не сохраняются, потому что они фактически не являются частью строкового значения, они просто необходимы для указания строковых литералов в вашем коде.

Итак, не используйте toString(). Вместо этого один из способов сделать это:

var arr = ['item1','item2','item3','item4'];

var quotedAndCommaSeparated = "'" + arr.join("','") + "'";

// quotedAndCommaSeparated === "'item1','item2','item3','item4'"

Метод Array.join() возвращает строку, которая представляет собой все элементы массива, объединенные в одну строку с (необязательным) разделителем между каждым элементом. Поэтому, если вы укажете разделитель, который включает кавычки и запятые, вам просто нужно вручную добавить начальную и конечную цитату для первого и последнего элементов (соответственно).

(И, пожалуйста, скажите, что вы не используете клиентский JavaScript для создания своего SQL.)

EDIT: чтобы разрешить пустой массив, включите значение по умолчанию для результирующей строки, иначе (как указано отсутствующим) строка будет "''":

var newString = arr.length === 0 ? "" : "'" + arr.join("','") + "'";
// default for empty array here ---^^

(Возможно, более целесообразно иметь if (arr.length===0) для выполнения некоторых других действий, а не для выполнения инструкции SELECT.)

Ответ 2

Простое исправление заключается в добавлении самих кавычек

for(var i=0; i<items.length; i++){
    items[i] = "'" + items[i] + "'";
}

var list_with_quotes = items.join(",");

Обратите внимание, что я полностью игнорирую проблемы с SQL-инъекциями.

Ответ 3

Используйте Array.map, чтобы обернуть каждый элемент кавычками:

items.map(function(item) { return "'" + item + "'" }).join(',');

Код становится проще с функциями ES6 - функциями стрелок и строками шаблонов (реализованы в node.js 4.0 и выше):

items.map(i => `'${i}'`).join(',');

Вы также можете использовать белый список для предотвращения инъекций SQL:

const validItems = new Set(['item1', 'item2', 'item3', 'item4']);

items
   .filter(i => validItems.has(i))
   .map(i => `'${i}'`)
   .join(',')

Ответ 4

Сохраните кавычки:

var names = ["'item1'","'item1'","'item3'"];
alert('IN (' + names[1] + ')'); // IN ('item1')