拆分数组会导致错误:不是函数

时间:2016-08-10 20:06:35

标签: javascript arrays split

我想拆分已经拆分的数组。

    var string = '2016-08-08,63|2016-08-07,67|2016-08-06,64|2016-08-05,53|2016-08-04,63';
    var array_dt = string.split(',');
    var array_s = array_dt.split('|');
    console.log(array_s);

该代码返回TypeError: array_dt.split is not a function

我猜测split()无法拆分数组。我错了吗?

这就是我希望它的样子。对于array_dt2016-08-08,2016-08-07,2016-08-06,2016-08-05,2016-08-04。对于array_s63,67,64,53,63。我将两个变量用于图表(行),这样我就可以打印出数字的日期。我的代码就是一个例子!

我该如何做到这一点?

Demo

3 个答案:

答案 0 :(得分:2)

如果要分割两个字符,只需使用正则表达式

var string = '2016-08-08,63|2016-08-07,67|2016-08-06,64|2016-08-05,53|2016-08-04,63';
var array_dt = string.split(/[,|]/);

console.log(array_dt)

这将为您提供一个具有交替值的数组,如果您想将其拆分,则可以执行

var string = '2016-08-08,63|2016-08-07,67|2016-08-06,64|2016-08-05,53|2016-08-04,63';
var array_dt = string.split(/[,|]/);

var array1 = array_dt.filter( (x,i) => (i%2===0));
var array2 = array_dt.filter( (x,i) => (i%2!==0));

console.log(array1, array2)

或者,如果您想一次性完成所有操作,可以将值减少到对象

var string = '2016-08-08,63|2016-08-07,67|2016-08-06,64|2016-08-05,53|2016-08-04,63';

var array = string.split(/[,|]/).reduce(function(a,b,i) {
  return a[i%2===0 ? 'dates' : 'numbers'].push(b), a;
}, {numbers:[], dates:[]});

console.log(array)

如果性能很重要,那么你将恢复到老式循环和两个阵列

var string = '2016-08-08,63|2016-08-07,67|2016-08-06,64|2016-08-05,53|2016-08-04,63';

var array = string.split(/[,|]/);
var array1 = [];
var array2 = [];

for (var i = array.length; i--;) {
  if (i % 2 === 0) {
    array1.push(array[i]);
  } else {
    array2.push(array[i]);
  }
}

console.log(array1, array2)

答案 1 :(得分:2)

var string = '2016-08-08,63|2016-08-07,67|2016-08-06,64|2016-08-05,53|2016-08-04,63';
var array_dt = [];
var array_s = [];
string.split('|').forEach(function(el){
  var temp = el.split(",");
  array_dt.push(temp[0]);
  array_s.push(temp[1]);
});
console.log(array_dt);
console.log(array_s);

答案 2 :(得分:1)

一次只做一步 - 首先按管道拆分,留下看起来像2016-08-08,63的物品。然后对于每一个,用逗号分割,并将值插入到两个输出数组中。

var string = '2016-08-08,63|2016-08-07,67|2016-08-06,64|2016-08-05,53|2016-08-04,63';

var arr = string.split("|");
var array_dt = [];
var array_s = [];
arr.forEach(function(item) {
    var x = item.split(",");
    array_dt.push(x[0]);
    array_s.push(x[1]);
});