最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Convert javascript string to array - Stack Overflow

programmeradmin3浏览0评论

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)

  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.

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)

  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.

Share Improve this question asked Aug 31, 2018 at 7:37 user3590094user3590094 1191 gold badge2 silver badges11 bronze badges 7
  • 2 "I tried with split method but without success." Please show your code. – str Commented Aug 31, 2018 at 7:38
  • This might be helpful gist.github.com/webinista/11240585 – kgbph Commented Aug 31, 2018 at 7:39
  • @kgbph You should never extend the prototypes of built-ins. E.g. never extend Array.prototype. – str Commented Aug 31, 2018 at 7:40
  • @str Why not? It's perfectly fine to extend prototypes if well documented. And of course you need to take care of conflicts. But if someone extends prototypes he/she should know what they do anyway. – Akaino Commented Aug 31, 2018 at 7:43
  • @Akaino Why is extending native objects a bad practice? – str Commented Aug 31, 2018 at 7:48
 |  Show 2 more comments

7 Answers 7

Reset to default 6

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.

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

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. To do this you can make a for loop that reads the current value and the last value and compares the two. 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);

You can use String.split(',') to split into individual values, then group them based on their positions (result of integer division with 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:

Use Array.map() to map the values of an array to a function or property name. Use Array.reduce() to create an object, where the keys are produced from the mapped results.

The result is an object, but can be easily converted into an array using Object.values() as shown below:

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

I think use JSON.parse is better:

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

发布评论

评论列表(0)

  1. 暂无评论