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


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);

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(",");

3

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

var string = "0,1"
var array = [...string.replace(',', '')]
console.log(array[0])

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 => глобальный флаг


0

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

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

var strArr = Array.prototype.filter.call(str, eachChar => eachChar !== ',');

-1

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

it('convert string to array', function () {
  expect('0,1'.replace(',', '').split('')).toEqual(['0','1'])
});
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.