将JavaScript字符串转换为数组。

3
我有这样的字符串
    '10:00','13:00','12:00','15:00','08:00','12:00'

我需要的格式如下:
数组(3)
  Array[0] ['10:00', '13:00']
  Array[1] ['12:00', '15:00']
  Array[2] ['08:00', '12:00']

我尝试使用分割方法,但没有成功。

2
我尝试使用split方法,但没有成功。请展示你的代码。 - str
这可能会有所帮助 https://gist.github.com/webinista/11240585 - kgbph
@kgbph 你绝对不应该扩展内置对象的原型。例如,永远不要扩展 Array.prototype - str
@str 为什么不行呢?如果有很好的文档说明,扩展原型是完全可以的。当然,你需要注意冲突问题。但是,如果有人扩展原型,他/她应该知道自己在做什么。 - Akaino
@Akaino,问题在于很少有人知道它意味着什么以及它如何破坏他们的代码。而且有许多情况下,它甚至以不好的方式影响了ECMAScript的发展。例如,Array.prototype.includes被称为includes,是因为contains已经被许多库使用,委员会担心不兼容性。 - str
显示剩余2条评论
7个回答

6

您可以将单引号替换为双引号,添加括号并将其解析为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; }


5

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


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

1
一个潜在的解决方案:
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);

1
你可以使用 String.split(',') 将其拆分为单个值,然后基于它们的位置(整数除法的结果)将它们分组。
我正在使用30秒代码groupBy(免责声明:我是该项目/网站的维护者之一),根据整数除以2来对元素进行分组。简短的解释:

使用Array.map()将数组的值映射到函数或属性名称。使用Array.reduce()创建一个对象,其中键由映射结果生成。

结果是一个对象,但可以使用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; }


1
在这种情况下,您希望比较两个值。 为此,您可以创建一个for循环,读取当前值和上一个值,并将两者进行比较。 如果上一个值高于当前值,则会发生分割逻辑。
要么将当前值添加到结果数组中最后一项(它是字符串数组)中,要么在结果数组末尾添加一个新的字符串数组。

0

我认为使用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);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接