Javascript 解析、缩放和重新设置数字坐标字符串的最优雅方式

Javascript 解析、缩放和重新设置数字坐标字符串的最优雅方式,javascript,Javascript,假设我们有这个字符串 var coords=“10,10 20,20 30,30 20,10 60,80” 让我们进一步假设上面的每一个都是XY坐标。现在,我想“将每个项目按因子进行缩放,例如,sx和sy并返回一个格式化的字符串 例如scaleCoords(coords,0.5,2)应该返回“5,20 10,40 15,60 10,20 30160” 在JS中最优雅的方式是什么?(我所说的优雅是指最短的,不一定是最快的) 我的想法是在上拆分它,得到一个数组,然后对于每个数组元素,在“,”上拆分它

假设我们有这个字符串
var coords=“10,10 20,20 30,30 20,10 60,80”

让我们进一步假设上面的每一个都是XY坐标。现在,我想“将每个项目按因子进行缩放,例如,
sx
sy
并返回一个格式化的字符串

例如
scaleCoords(coords,0.5,2)
应该返回
“5,20 10,40 15,60 10,20 30160”

在JS中最优雅的方式是什么?(我所说的优雅是指最短的,不一定是最快的)


我的想法是在
上拆分它,得到一个数组,然后对于每个数组元素,在“,”上拆分它,执行
parseInt()
在每个字符串上,乘以
sx
sy
并将转换后的值添加到另一个字符串中。返回该字符串。我相信有更好的方法

您可以使用空格和逗号进行拆分,并将因子应用到每个数字,稍后再进行合并

函数scaleWord(字符串、左、右){
变量f=[左,右];
返回字符串.split(“”).map(函数(a){
返回a.split(',).map(函数(b,i){
返回b*f[i];
});
}).加入(“”);
}
var coords=“10,1020,2030,3020,1060,80”;

console.log(scaleCoords(coords,0.5,2));/“5,20 10,40 15,60 10,20 30160”
您可以使用空格和逗号拆分,并将因子应用于每个数字,稍后再合并

函数scaleWord(字符串、左、右){
变量f=[左,右];
返回字符串.split(“”).map(函数(a){
返回a.split(',).map(函数(b,i){
返回b*f[i];
});
}).加入(“”);
}
var coords=“10,1020,2030,3020,1060,80”;

log(scaleCoords(coords,0.5,2));/'5,20 10,40 15,60 10,20 30160'
或稍加修改以避免调用坐标对的
map
join
的额外开销

var data = "10,10 20,20 30,30 20,10 60,80";
function scaleNumString(s,xs,ys){
    return s.split(" ").map(c=>((x,y)=>x*xs+","+y*ys)(...c.split(","))).join(" ");
}
scaleNumString(data,0.5,0.5)


或者稍加修改以避免调用坐标对的
map
join
的额外开销

var data = "10,10 20,20 30,30 20,10 60,80";
function scaleNumString(s,xs,ys){
    return s.split(" ").map(c=>((x,y)=>x*xs+","+y*ys)(...c.split(","))).join(" ");
}
scaleNumString(data,0.5,0.5)


var newCoords=
coords.split[','].map()
?返回值的映射函数是您的工作。这些词是空格和逗号(X,YX,Y)的混合体X和Y有不同的缩放值,所以我需要区分按空格分割的,在地图函数中按逗号分割,相乘,并返回一个连接的值。似乎你甚至没有尝试你的想法就过早地提出了问题。这不是这个网站的工作方式。试着先…遇到麻烦时问问题我确实尝试了我的想法,并且成功了如果成功了,我没有想到像下面建议的答案那样使用join,这比我的较长方法(这就是为什么我要求使用更优雅的方法)var newCoords=
coords.split[','].map()
?返回值的map函数是你的工作。co-ords是空格和逗号(X,YX,Y)的混合体X和Y有不同的缩放值,所以我需要区分按空格分割的,在地图函数中按逗号分割,相乘,并返回一个连接的值。似乎你甚至没有尝试你的想法就过早地提出了问题。这不是这个网站的工作方式。试着先…遇到麻烦时问问题我确实尝试了我的想法,并且成功了如果成功了,我没有像下面建议的那样使用join,这比我的较长方法要好得多(这就是为什么我要求使用更优雅的方法)真的只是OP认为他们应该做的…但甚至没有尝试ES6版本看起来不错:)真的只是OP认为他们应该做的…但甚至没有尝试ES6版本看起来不错:)我想如果混淆是目标,你已经实现了。;-)我想如果混淆是目标,你已经实现了。;-)
return s.replace(/[0-9]+,[0-9]+/g,a=>(a=>a[0]*xs+","+a[1]*ys)(a.split(",")));