最优雅的方式来解析,缩放和重新串联一串数字坐标

use*_*529 0 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 30,160"

什么是最优雅的方式来做到这一点?(优雅我的意思是最短,不一定最快)?

我的想法是把它分解上" ",得到一个数组,然后为每个数组元素,将它的""做一个parseInt()对每个人,乘以sx和sy,并添加转换值到另一个字符串.返回那个字符串.我相信有更好的方法

Nin*_*olz 5

您可以使用空格和逗号分割,并将因子应用于每个数字并稍后加入.

function scaleCoords(string, left, right) {
    var f = [left, right];
    return string.split(' ').map(function (a) {
        return a.split(',').map(function (b, i) {
            return b * f[i];
        });
    }).join(' ');
}

var coords = "10,10 20,20 30,30 20,10 60,80";
console.log(scaleCoords(coords, 0.5, 2)); // '5,20 10,40 15,60 10,20 30,160'
Run Code Online (Sandbox Code Playgroud)

带有休息参数的 ES6...

function scaleCoords(s, ...f) {
    return s.split(' ').map(a => a.split(',').map((b, i) => b * f[i])).join(' ');
}

var coords = "10,10 20,20 30,30 20,10 60,80";
console.log(scaleCoords(coords, 0.5, 2)); // '5,20 10,40 15,60 10,20 30,160'
Run Code Online (Sandbox Code Playgroud)

  • 真的只是OP认为他们应该做的.....但似乎没有尝试过 (3认同)
  • ES6版看起来不错:) (2认同)