Javascript:如何将嵌套的字符串数组拆分为数字

Javascript:如何将嵌套的字符串数组拆分为数字,javascript,arrays,Javascript,Arrays,我有一个像这样的数组 var a = [ [ "1.31069258855609,103.848649478524", "1.31138534529796,103.848923050526" ], [ "1.31213221536436,103.848328363879", "1.31288473199114,103.849575392632" ] ]; 我想把它分成几个部分 var b = [ "1.31069258855609,103.84864947

我有一个像这样的数组

var a = [ 

      [ "1.31069258855609,103.848649478524", "1.31138534529796,103.848923050526" ],
      [ "1.31213221536436,103.848328363879", "1.31288473199114,103.849575392632" ]

    ];
我想把它分成几个部分

var b = [ "1.31069258855609,103.848649478524", "1.31138534529796,103.848923050526" ]

var c =  [ "1.31213221536436,103.848328363879", "1.31288473199114,103.849575392632" ]
进一步

var d = [ 1.31069258855609, 1.31213221536436, 1.31213221536436, 1.31288473199114 ]
var e = [ 103.848649478524, 103.848923050526, 103.848328363879, 103.849575392632 ]
我该怎么做?我试过使用类似的东西

.split(',')[0]
.split(',')[1]

但在“”后面有逗号。有人能帮我吗?请,谢谢

您可以
减少为一个数组,迭代每个子数组,然后迭代子数组项中的每个分割数:

const a=[
["1.31069258855609,103.848649478524", "1.31138534529796,103.848923050526"],
["1.31213221536436,103.848328363879", "1.31288473199114,103.849575392632"]
];
常数[d,e]=a.reduce((a,arr)=>{
arr.forEach((项目)=>{
item.split(',).map(Number).forEach((num,i)=>{
如果(!a[i])a[i]=[];
a[i]。推送(num);
});
});
返回a;
}, []);
控制台日志(d);

控制台日志(e)解决此问题的一种方法是利用字符串数组中数值的顺序

首先将两个数组展平为一个数组,然后减少结果-每次reduce操作的迭代,通过
将字符串拆分为两部分,然后根据该值拆分索引将每个部分的数值放入输出数组:

var a=[
[ "1.31069258855609,103.848649478524", "1.31138534529796,103.848923050526" ],
[ "1.31213221536436,103.848328363879", "1.31288473199114,103.849575392632" ]
];
const result=a.flat().reduce((输出,字符串)=>{
string.split(',')//拆分数组项的任何字符串
.map(Number)//将每个字符串转换为数字
.forEach((项目,索引)=>{
输出[index].push(item)//将每个数字映射到相应的输出子数组
})
返回输出
}, [[],[]]) 
常数[d,e]=结果
console.log('d=',d)

log('e=',e)
请检查以下代码是否符合您的要求

function test3(a) {
 let result = [];
 for (let i=0; i<a.length; i++) {
  let subArr = [];
  for (let j=0; j<a[i].length; j++) {
   let splits = a[i][j].split(',');
   subArr.push(splits[0]);
   subArr.push(splits[1]);
  }
  result.push(subArr);
 }
 console.log("Result ", result);
 return result;
}

这里有一种快速而肮脏的方法,基本上是递归地查看数组,直到找到一个字符串,一旦有一个字符串在逗号处拆分,然后将结果添加到两个不同的数组中。最后,返回两个数组

var a=[
[ "1.31069258855609,103.848649478524", "1.31138534529796,103.848923050526" ],
[ "1.31213221536436,103.848328363879", "1.31288473199114,103.849575392632" ]
];
函数排序(数组){
变量a=[],b=[];
函数内部(c){
c、 forEach(函数(d){
if(数组isArray(d)){
内部(d);
}否则{
变量e=d.split(',');
a、 push(e[0]);
b、 推(e[1]);
}
})
}
内部(阵列);
返回[a,b]
}

控制台日志(排序(a))这是另一个使用
map
flat
reduce
的解决方案。其思想是获得一个包含所有数字的连续数组,然后使用
reduce
将交替数字添加到两个不同的数组中:

const a=[
["1.31069258855609,103.848649478524", "1.31138534529796,103.848923050526"],
["1.31213221536436,103.848328363879", "1.31288473199114,103.849575392632"]
];
const[d,e]=a.map(arr=>arr.map(s=>s.split(',').map(s=>parseFloat(s)))
.单位(2)
.减少((acc、curr、i)=>{
acc[i%2]。推送(当前);
返回acc;
}, [[], []]);
控制台日志(d);

控制台日志(e)OP需要一个数字数组?ie@CertainPerformance我想你的数字参差不齐
103.xx
s是一个单独的数组,
1.xx
s是一个单独的数组。好的,OP在我键入答案后编辑了他的预期输出。。。编辑…你的数字也是混合的。如果您仔细查看,
103.xx
数字将进入一个数组,而
1.xx
数字将进入另一个数组。@感谢您的反馈-刚刚更新的答案,非常感谢:-)
var a = [[ "1.31069258855609,103.848649478524", "1.31138534529796,103.848923050526" ], [ "1.31213221536436,103.848328363879", "1.31288473199114,103.849575392632" ]];
var b = a[0]
var c = a[1]
var d = test3(a)[0]
var e = test3(a)[1]