将数组拆分为较小的数组,并用空格分隔

时间:2018-08-30 13:58:08

标签: javascript arrays for-loop split

我有一个字符串' 1 22 333 4444 5 6 ',我想让它像这样-[[1, 22], [22, 333], [4444, 5], [5, 6]];

我尝试用于...循环,但没有帮助。

let str = ' 1 22 333 4444 5 6 ';
let arr = [];

for(let i = 0; i < str.length; i++)
  arr.push(str.slice(str.indexOf(' ', i),str.indexOf(' ',i+1)));

它给出了以下输出:

[ ' 1', '', ' 22', '', ' 333', '', ' 4444', '', ' 5', '', ' 6', '', '' ]

代替: [[1, 22], [22, 333], [4444, 5], [5, 6]];

为什么错了?有人知道怎么做吗?

8 个答案:

答案 0 :(得分:3)

根据问题,输出的格式不清楚。您可以通过几种方法来完成此操作,具体取决于输出的所需格式:

1)如果您希望每个最后一个项目都成为下一个块的第一项

const input = ' 1 22 333 4444 5 6 ';

const result = input.trim().split(' ').map(Number).reduce((all, n, i, arr) => i ? [...all,[arr[i-1],n]] : [] ,[])

console.log(result);

2)如果您想将其分成两部分

const input = ' 1 22 333 4444 5 6 ';

const result2 = input.match(/(\d+ \d+)/gi).map(a => a.split(' ').map(Number));

console.log(result2);

答案 1 :(得分:2)

  Opinion   Questions
    Cars      Like Cars
    Cars      Model
    Cars      Years
    Cars      Color

答案 2 :(得分:1)

无法执行您想做的事情,因为每个数字之间的分隔符对于整个字符串都是一致的。您需要为每个数字使用一个定界符,然后为组使用不同的定界符。

例如;

let str = '1 22,333 4444,5 6';
let groups = str.split(",");
let arr = [];

for (let i = 0; i < groups.length; i++)
  arr.push(groups[i].split(" "));
  
console.log(arr);

答案 3 :(得分:1)

作为替代方案,您可以将正则表达式与捕获组配合使用,并使用正向超前来断言以下是一个或多个数字,并将其捕获到第二个捕获组中。

(\d+) (?=(\d+))

然后将数组中的第1组和第2组添加到arr

const regex = /(\d+) (?=(\d+))/g;
let m;
let str = ' 1 22 333 4444 5 6 ';
let arr = [];

while ((m = regex.exec(str)) !== null) {
  arr.push([m[1], m[2]]);
}

console.log(arr);

答案 4 :(得分:0)

也许是这样的:

let str = ' 1 22 333 4444 5 6 ';
let arr = [];

let str_arr=str.split(' ');
for(let key in str_arr){
   if(str_arr[key]!=''){
   	  let add_arr=[];
   	  add_arr.push(parseInt(str_arr[key],10));
   	  let next_key=parseInt(key,10)+1;
   	  if(str_arr[next_key]){
   	  	add_arr.push(parseInt(str_arr[next_key],10));
   	    arr.push(add_arr);
   	  }
   }
}
console.log(arr);

答案 5 :(得分:0)

您应该运行以下代码

let str = ' 1 22 333 4444 5 6 ';
let arr = [];
var res = str.split(" ");
console.log(res);
var a = res.filter(i => i !== "");
console.log(a);
var tempArr = [];
var counter = 0;
for (var i = 0; i < a.length; i++){
    counter++;
    tempArr.push(a[i]);
    if(counter == 2){
        arr.push(tempArr);
        tempArr = [];
        counter = 0;
    }
}
console.log(arr);

答案 6 :(得分:0)

let str = ' 1 22 333 4444 5 6 ';
let arr = [];
let temp = str.trim().split(" ");
for (let i = 0; i < temp.length - 1; i++)
  arr.push([parseInt(temp[i]), parseInt(temp[i + 1])]);

console.log(arr);
for (let i = 0; i < arr.length - 1; i++) {
  console.log(arr[i]);
}

以上代码的输出为

[[1, 22], [22, 333], [4444, 5], [5, 6]]
[1, 22] 
[22, 333]
[4444, 5]
[5, 6]

答案 7 :(得分:0)

如果我正确地解释任务,这是解决问题的一种方法:

' 1 22 333 4444 5 6 '
  .trim()
  .split(' ')
  .reduce((arr, item, index) => {
    if (index % 2 === 0) {
      arr.push([ item ]);
    } else {
      arr.slice(-1)[0].push(item);
    }
    return arr;
  }, [])