我有一个字符串' 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]];
为什么错了?有人知道怎么做吗?
答案 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)
作为替代方案,您可以将正则表达式与捕获组配合使用,并使用正向超前来断言以下是一个或多个数字,并将其捕获到第二个捕获组中。
然后将数组中的第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;
}, [])