Преобразовать строку с запятыми в массив

366

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

Посмотрите на код:

var string = "0,1";
var array = [string];
alert(array[0]);

В этом случае alertпоявится всплывающее окно 0,1. Когда это будет массив, он будет всплывать 0, а когда alert(array[1]);вызывается, он должен всплывать 1.

Есть ли шанс преобразовать такую ​​строку в массив JavaScript?

Скотт
источник
В зависимости от того, почему вы этого хотите, строки и массивы уже очень похожи (т.е. string[0] === '0'в вашем вопросе), в большинстве случаев вы можете рассматривать строку как массив символов и использовать для этого методы массива.
Пол С.
@PaulS .: Это не удастся в IE8 и ниже.
Я ненавижу Ленивых
Лучшая практика для поддержки всех типов строк. Смотрите здесь stackoverflow.com/a/32657055/2632619
Andi AR

Ответы:

667

Для простых членов массива, как это, вы можете использовать JSON.parse.

var array = JSON.parse("[" + string + "]");

Это дает вам массив чисел.

[0, 1]

Если вы используете .split(), вы получите массив строк.

["0", "1"]

Просто знайте, что JSON.parseограничит вас поддерживаемыми типами данных. Если вам нужны такие значения, как undefinedили функции, вам нужно использовать eval()или синтаксический анализатор JavaScript.


Если вы хотите использовать .split(), но вам также нужен Массив чисел, вы можете использовать его Array.prototype.map, хотя вам нужно уменьшить его для IE8 и ниже или просто написать традиционный цикл.

var array = string.split(",").map(Number);
Я ненавижу ленивых
источник
4
Также имейте JSON.parse();в виду, что не доступно в IE6, IE7. Я думаю, что в этом случае String.split(',');легче.
scunliffe
@scunliffe: Да, шим понадобился бы, иначе можно применить jQuery-подход var array = (new Function("return [" + string + "];"))(). Использование .split()в порядке, если числа не нужны, в противном случае вам необходимо отобразить результат.
Я ненавижу Ленивых
11
@ Downvoter: Попробуйте описать, что не так с ответом, чтобы я мог продемонстрировать, как вы ошибаетесь.
Я ненавижу Ленивых
@ Я ненавижу Ленивых Это не поддерживает объект string.see здесь stackoverflow.com/a/32657055/2632619
Andi AR
@FarzadYZ Будьте осторожны с этим (используя eval). Если массив содержит значения из входных данных на стороне клиента, это будет небезопасно.
Уилт
86

Это легко достигается в ES6 ;

Вы можете конвертировать строки в массивы с помощью Array.from ('string') ;

Array.from("01")

будет console.log

['0', '1']

Что именно то, что вы ищете.

Рэй Ким
источник
1
Это круто. Я переехал мой код от JSON.parseдо Array.fromполудня с помощью ES6. СпасибоRay Kim
Эшвар Прасад Ядданапуди
console.log (тип данных); // string ========== var myArray = Array.from (Data); ============ console.log (typeof myArray); // Объект не поддерживает свойство или метод 'from' ========== Почему это так?
Жанатбек Шаршеев
1
Но Array.from("0, 1, 233")вернется ["0", ",", " ", "1", ",", " ", "2", "3", "3"], что если я захочу [0, 1, 233] ?
Тина Чен
17
Это преобразование каждого отдельного символа в качестве элемента массива. Но нам нужны только строки, разделенные запятыми, чтобы быть элементами массива. Так что не правильное решение.
Эдисон Д'Суза
1
Этот метод надежен только тогда, когда аргумент является Setстрокой.
Джош Хабдас
57

Если строка уже в формате списка, вы можете использовать JSON.parse:

var a = "['a', 'b', 'c']";
a = a.replace(/'/g, '"');
a = JSON.parse(a);
otaviodecampos
источник
24

Конвертировать все типы строк

var array = (new Function("return [" + str+ "];")());



var string = "0,1";

var objectstring = '{Name:"Tshirt", CatGroupName:"Clothes", Gender:"male-female"}, {Name:"Dress", CatGroupName:"Clothes", Gender:"female"}, {Name:"Belt", CatGroupName:"Leather", Gender:"child"}';

var stringArray = (new Function("return [" + string+ "];")());

var objectStringArray = (new Function("return [" + objectstring+ "];")());

JSFiddle https://jsfiddle.net/7ne9L4Lj/1/

Результат в консоли

введите описание изображения здесь

Некоторая практика не поддерживает объектные строки

- JSON.parse("[" + string + "]"); // throw error

 - string.split(",") 
// unexpected result 
   ["{Name:"Tshirt"", " CatGroupName:"Clothes"", " Gender:"male-female"}", "      {Name:"Dress"", " CatGroupName:"Clothes"", " Gender:"female"}", " {Name:"Belt"",    " CatGroupName:"Leather"", " Gender:"child"}"]
Анди А.Р.
источник
Отличная функция, которую я тоже использую, но, к сожалению, она НЕ работает для строк или символов: например, "0, s", есть идеи, как это исправить?
sqp_125
1
@ sqp_125 попробуй 0, 's'?
Нереальность
20

Для таких простых элементов массива вы можете использовать JSON.parse.

var listValues = "[{\"ComplianceTaskID\":75305,\"RequirementTypeID\":4,\"MissedRequirement\":\"Initial Photo Upload NRP\",\"TimeOverdueInMinutes\":null}]";

var array = JSON.parse("[" + listValues + "]");

Это дает вам массив чисел.

теперь значение вашей переменной похоже на array.length = 1

Значение вывода

array[0].ComplianceTaskID
array[0].RequirementTypeID
array[0].MissedRequirement
array[0].TimeOverdueInMinutes
Рагхав Чаубей
источник
16

Еще один вариант использования ES6 - использование синтаксиса Spread .

var convertedArray = [..."01234"];

var stringToConvert = "012";
var convertedArray  = [...stringToConvert];
console.log(convertedArray);

Абхинав Галодха
источник
2
Потрясающие! Вместе с ответом Array.from они должны быть единственными ответами для решений ES6.
Артем Пранович
10

используйте встроенную функцию map с анонимной функцией, например так:

string.split(',').map(function(n) {return Number(n);});

[править] вот как бы вы его использовали

var string = "0,1";
var array = string.split(',').map(function(n) {
    return Number(n);
});
alert( array[0] );
Дэн Мантила
источник
1
Это наиболее общий ответ. JSON нельзя использовать для произвольных разделителей (например, табуляции, пробела и т. Д.)
javadba
Это не будет работать, когда ваши значения массива являются строковыми значениями, которые могут иметь запятую внутри. Например: "123, 'a string with a , comma', 456". Вы можете использовать более сложное регулярное выражение для правильной обработки таких случаев (например, что-то вроде предложенного здесь ).
Уилет
@ Хорошо, нет, это не так, но да, вы можете использовать регулярные выражения, чтобы это исправить
Дэн Мантила
1
Я не хотел критиковать ваш ответ, но я написал это, потому что я использовал ваше решение и столкнулся с этой проблемой самостоятельно. Мысль оставить комментарий для других, возможно, столкнуться с аналогичными проблемами.
Уилт
3

Больше примеров "Попробуйте сами" ниже.

Определение и использование Метод split () используется для разбиения строки на массив подстрок и возвращает новый массив.

Совет: если в качестве разделителя используется пустая строка (""), строка разделяется между каждым символом.

Примечание. Метод split () не изменяет исходную строку.

var res = str.split(",");
HAROONMIND
источник
3

Вы можете использовать javascript Spread Syntax для преобразования строки в массив. В приведенном ниже решении я удаляю запятую, а затем преобразую строку в массив.

var string = "0,1"
var array = [...string.replace(',', '')]
console.log(array[0])
p8ul
источник
2

Как преобразовать разделенную запятыми строку в массив в JavaScript?

var string = 'hello, world, test, test2, rummy, words';
var arr = string.split(', '); // split string on comma space
console.log( arr );

//Output
["hello", "world", "test", "test2", "rummy", "words"]

Дополнительные примеры преобразования строки в массив в javascript с использованием следующих способов:

  1. Разделить () - без разделителя:
  2. Разделить () - Разделитель пустых строк:
  3. Разделить () - Разделитель в начале / конце:
  4. Разделитель регулярных выражений:
  5. Захватывающие скобки:
  6. Split () с предельным аргументом

    проверьте эту ссылку ==> https://www.tutsmake.com/javascript-convert-string-to-array-javascript/

разработчик
источник
1

Я удаляю символы '[', ']' и делаю их с помощью ','

let array = stringObject.replace('[','').replace(']','').split(",").map(String);
Самуэль Иван
источник
0

Split (",") может конвертировать строки с запятыми в массив String, вот мой фрагмент кода.

    var input ='Hybrid App, Phone-Gap, Apache Cordova, HTML5, JavaScript, BootStrap, JQuery, CSS3, Android Wear API'
    var output = input.split(",");
    console.log(output);

[«Гибридное приложение», «Phone-Gap», «Apache Cordova», «HTML5», «JavaScript», «BootStrap», «JQuery», «CSS3», «Android Wear API»]]

Хите саху
источник
0

var i = "[{a:1,b:2}]",
    j = i.replace(/([a-zA-Z0-9]+?):/g, '"$1":').replace(/'/g,'"'),
    k = JSON.parse(j);

console.log(k)

// => объявление регулярного выражения

[a-zA-Z0-9] => соответствовать всем аз, AZ, 0-9

(): => группировать все совпадающие элементы

$ 1 => строка замены относится к первой группе совпадений в регулярном выражении.

g => глобальный флаг

KARTHIKEYAN.A
источник
0

Пример использования Array.filter:

var str = 'a,b,hi,ma,n,yu';

var strArr = Array.prototype.filter.call(str, eachChar => eachChar !== ',');
Abhimanyu
источник
-1

Почему бы вам не заменить ,запятую и split('')строку, подобную этой, что приведет к ['0', '1']тому, что вы можете заключить результат в parseInt()преобразование элемента в целочисленный тип.

it('convert string to array', function () {
  expect('0,1'.replace(',', '').split('')).toEqual(['0','1'])
});
Простое решение
источник