Перетворити рядок з комами в масив


365

Як я можу перетворити рядок у масив JavaScript?

Подивіться на код:

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

У цьому випадку alertбуде спливаюче вікно a 0,1. Коли це буде масив, він з'явиться a 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: Правда, потрібна була б криниця, або можна скористатись підходом jQuery, щоб прошивати її var array = (new Function("return [" + string + "];"))(). Використовувати .split()це добре, якщо цифри не потрібні, інакше потрібно буде відобразити результат.
Я ненавиджу ледачих

10
@Downvoter: Спробуйте описати, що не так у відповіді, щоб я міг продемонструвати, як ви помиляєтесь.
Я ненавиджу ледачих

@I Ненависть Lazy Це оленяча шкіра підтримка об'єкт string.see тут stackoverflow.com/a/32657055/2632619
Andi AR

@FarzadYZ Будьте обережні з цим (використовуючи eval). Якщо масив містить значення з введення на стороні клієнта, це буде небезпечно.
Заповіт


86

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

Ви можете конвертувати рядки в масиви за допомогою Array.from ('string') ;

Array.from("01")

will console.log

['0', '1']

Це саме те, що ви шукаєте.


1
Це круто. Я перемістив свій код з JSON.parseтого, Array.fromяк я використовую ES6. ДякуюRay Kim
Ешвар Прасад Ядданапуді

console.log (typeof Data); // string ========== var myArray = Array.from (Дані); ============ 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'?
Нереальність

19

Для таких простих членів масиву ви можете використовувати 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

використовувати вбудовану функцію карти з анонімною функцією, наприклад:

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

Ви можете використовувати синтаксис 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. Спліт () з граничним аргументом

    перегляньте це посилання ==> 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);

["Hybrid App", "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, 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.