简体   繁体   English

将javascript字符串转换为数组

[英]Convert javascript string to array

I have string like this 我有这样的字符串

    '10:00','13:00','12:00','15:00','08:00','12:00'

I need it in format like this 我需要这样的格式

Array(3) 阵列(3)

  Array[0] ['10:00', '13:00']
  Array[1] ['12:00', '15:00']
  Array[2] ['08:00', '12:00']

I tried with split method but without success. 我试过分裂方法,但没有成功。

You could replace single quotes with double quotes, add brackes and parse it as JSON and get an array, which is the grouped by two elements. 您可以用双引号替换单引号,添加括号并将其解析为JSON并获取一个数组,该数组由两个元素分组。

 var string = "'10:00','13:00','12:00','15:00','08:00','12:00'", array = JSON .parse('[' + string.replace(/'/g, '"') + ']') .reduce((r, s, i) => r.concat([i % 2 ? r.pop().concat(s) : [s]]), []); console.log(array); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

 var str = "'10:00','13:00','12:00','15:00','08:00','12:00'"; var oldArray = str.split(','); var newArray = []; while(oldArray.length){ let start = 0; let end = 2; newArray.push(oldArray.slice(start, end)); oldArray.splice(start, end); } console.log(newArray); 

You can use String.split(',') to split into individual values, then group them based on their positions (result of integer division with 2). 您可以使用String.split(',')拆分为单个值,然后根据它们的位置对它们进行分组(整数除法的结果为2)。

I am using groupBy from 30 seconds of code (disclaimer: I am one of the maintainers of the project/website) to group the elements based on the integer division with 2. Short explanation: 我使用groupBy30秒的代码 (免责声明:我是项目/网站的维护者之一)基于整数除法对元素进行分组2.简短说明:

Use Array.map() to map the values of an array to a function or property name. 使用Array.map()将数组的值映射到函数或属性名称。 Use Array.reduce() to create an object, where the keys are produced from the mapped results. 使用Array.reduce()创建一个对象,其中的键是从映射结果生成的。

The result is an object, but can be easily converted into an array using Object.values() as shown below: 结果是一个对象,但可以使用Object.values()轻松转换为数组,如下所示:

 var data = "'10:00','13:00','12:00','15:00','08:00','12:00'"; const groupBy = (arr, fn) => arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val, i) => { acc[val] = (acc[val] || []).concat(arr[i]); return acc; }, {}); var arr = data.split(','); arr = groupBy(arr, (v, i) => Math.floor(i / 2)); arr = Object.values(arr); console.log(arr); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

How about: 怎么样:

"'10:00','13:00','12:00','15:00','08:00','12:00'"
.replace(/'/g, '').replace(/(,[^,]*),/g,"$1;")
.split(';').map(itm => itm.split(','))

In this case you want to compare 2 values. 在这种情况下,您想要比较2个值。 To do this you can make a for loop that reads the current value and the last value and compares the two. 为此,您可以创建一个for循环,读取当前值和最后一个值并比较两者。 If the last value is higher than current value, the splitting logic happens. 如果最后一个值高于当前值,则发生拆分逻辑。

Either you add the current value to the last item (which is an array of strings) in the results array or you add a new array of strings at the end of the results array. 要么将当前值添加到结果数组中的最后一项(这是一个字符串数组),要么在结果数组的末尾添加一个新的字符串数组。

One potential solution: 一个潜在的解决方

let S = "'10:00','13:00','12:00','15:00','08:00','12:00'";

let R = S.split(',');

let I = 0;

let A = new Array([],[],[]);

R.map((object, index) => {
    A[I][index % 2] = R[index];
    if (index % 2 == 1) I++;
});

console.log(A);

I think use JSON.parse is better: 我认为使用JSON.parse更好:

 var array = "'10:00','13:00','12:00','15:00','08:00','12:00'"; array = JSON.parse( '[' + array.replace(/'/g,'"') + ']' ); var array2 = []; for(var i=0;i < array.length - 1; i++){ array2.push([array[i], array[i+1]]); } console.log(array2); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM