我有一个看起来像这样的数组
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]
但“”后有逗号。有人可以帮我吗?请谢谢!
答案 0 :(得分:1)
您可以reduce
进入一个数组,依次遍历每个子数组,然后遍历子数组项中的每个分割数:
const a = [
["1.31069258855609,103.848649478524", "1.31138534529796,103.848923050526"],
["1.31213221536436,103.848328363879", "1.31288473199114,103.849575392632"]
];
const [d, e] = a.reduce((a, arr) => {
arr.forEach((item) => {
item.split(',').map(Number).forEach((num, i) => {
if (!a[i]) a[i] = [];
a[i].push(num);
});
});
return a;
}, []);
console.log(d);
console.log(e);
答案 1 :(得分:1)
解决此问题的一种方法是利用字符串数组中数字值的顺序。
首先将两个数组展平为单个数组,然后减少结果-在reduce操作的每次迭代中,将字符串,
分成两部分,然后将每个部分的数字值放入基于该值的输出数组拆分索引:
var a = [
[ "1.31069258855609,103.848649478524", "1.31138534529796,103.848923050526" ],
[ "1.31213221536436,103.848328363879", "1.31288473199114,103.849575392632" ]
];
const result = a.flat().reduce((output, string) => {
string.split(',') // Split any string of array item
.map(Number) // Convert each string to number
.forEach((item, index) => {
output[index].push(item) // Map each number to corresponding output subarray
})
return output
}, [[],[]])
const [ d, e ] = result
console.log( 'd = ', d )
console.log( 'e = ', e )
答案 2 :(得分:1)
这里有一种快速而肮脏的方法,基本上是递归地遍历数组,直到找到一个字符串为止,一旦在逗号处将其拆分,然后将结果添加到两个不同的数组中。最后,返回两个数组。
var a = [
[ "1.31069258855609,103.848649478524", "1.31138534529796,103.848923050526" ],
[ "1.31213221536436,103.848328363879", "1.31288473199114,103.849575392632" ]
];
function sort(array) {
var a = [], b = [];
function inner(c) {
c.forEach(function (d) {
if (Array.isArray(d)) {
inner(d);
} else {
var e = d.split(',');
a.push(e[0]);
b.push(e[1]);
}
})
}
inner(array);
return [a,b]
}
console.log(sort(a));
答案 3 :(得分:0)
请检查以下代码是否符合您的要求。
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" ]];
var b = a[0]
var c = a[1]
var d = test3(a)[0]
var e = test3(a)[1]
答案 4 :(得分:0)
这是使用map
,flat
和reduce
的另一种解决方案。这个想法是获得所有数字的一个连续数组,然后使用reduce
将交替的数字添加到2个不同的数组中:
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))))
.flat(2)
.reduce((acc, curr, i) => {
acc[i % 2].push(curr);
return acc;
}, [[], []]);
console.log(d);
console.log(e);