我有一个看起来像这样的json数组:
data: Array(8)
0: (3) ["test1", "4.96", "150"]
1: (3) ["test2", "156.16666666666666", "150"]
2: (3) ["test3", "279.3695652173913", "92"]
3: (3) ["test4", "1718", "16"]
4: (3) ["test5", "2.375", "16"]
5: (3) ["test6", "2230.6875", "16"]
6: (3) ["test7", "23.75", "32"]
我有一个拆分数组的方法:
data.forEach(test => {
result.run.data.push([
Number(test[0].split('test')[1]),
Number(test[1])
]);
result.count.data.push([
Number(test[0].split('test')[1]),
Number(test[2])
]);
});
如您所见,我在“测试”处拆分了数组。我的问题是,测试字符串可能会有所不同。我希望在json看起来略有不同(尽管结构相同)时执行相同的映射。
例如json数组如下:
data: Array(8)
0: (3) ["asdf1", "4.96", "150"]
1: (3) ["fasd2", "156.16666666666666", "150"]
2: (3) ["qwer3", "279.3695652173913", "92"]
3: (3) ["llll4", "1718", "16"]
4: (3) ["rwwe5", "2.375", "16"]
5: (3) ["ttgd6", "2230.6875", "16"]
6: (3) ["34227", "23.75", "32"]
我希望它以与第一个数组相同的方式拆分。
如何更改我的方法以在每行的开头而不是字符串拆分数组?
答案 0 :(得分:2)
您可以考虑使用正则表达式从字符串中提取数字,而不是拆分
console.log(/\d+/.exec('test1')) --> ["1"]
答案 1 :(得分:1)
您可以创建一个相同的函数并将参数作为参数传递给
spiltData(data,splitKey){
data.forEach(test => {
result.run.data.push([
Number(test[0].split(splitKey)[1]),
Number(test[1])
]);
result.count.data.push([
Number(test[0].split(splitKey)[1]),
Number(test[2])
]);
});
}
然后使用
this.spiltData(data,'test')
this.spiltData(data,'asdf')
我不确定result.count
和result.run
在这里,但您也可以将它们作为参数传递
更新
如果键可以是任何动态字符串,并且您不知道,并且字符串中只有一个数字,那么您可以使用regex to get the number from the end of a string显示您的代码应为
spiltData(data){
data.forEach(test => {
var matches=test[0].match(/\d+$/);
result.run.data.push([
Number( matches ? matches[0] : 0),
Number(test[1])
]);
result.count.data.push([
Number(matches ? matches[0] : 0),
Number(test[2])
]);
});
}
答案 2 :(得分:1)
只需替换Number(test[0].split('test')[1])
使用
Number(test[0].split('').filter(x => !isNaN(parseInt(x, 10))))
尝试这样:
this.data.forEach(test => {
this.result.run.data.push([
Number(test[0].split('').filter(x => !isNaN(parseInt(x, 10)))),
Number(test[1])
]);
...
});
请参见Working Demo
答案 3 :(得分:1)
data.forEach(test => {
result.run.data.push([
Number(/(\d+)$/.exec(test[0])[1]),
Number(test[1])
]);
result.count.data.push([
Number(/(\d+)$/.exec(test[0])[1]),
Number(test[2])
]);
});