Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将相对宽度列表转换为像素宽度_Javascript - Fatal编程技术网

Javascript 将相对宽度列表转换为像素宽度

Javascript 将相对宽度列表转换为像素宽度,javascript,Javascript,这是一个代码审查问题,比什么都重要 我有以下问题: 给定一个相对宽度列表(没有任何单位,只是彼此相对),生成一个像素宽度列表,使这些像素宽度具有与原始列表相同的比例 输入:比例列表,总像素宽度 输出:像素宽度列表,其中每个宽度是一个整数,这些宽度的总和等于总宽度 代码: var size=“1,2,3,5,7,10”。拆分(“,”)//初始比例 var totalWidth=1024;//总像素宽度 var-sizesTotal=0; 对于(变量i=0;i

这是一个代码审查问题,比什么都重要

我有以下问题:

给定一个相对宽度列表(没有任何单位,只是彼此相对),生成一个像素宽度列表,使这些像素宽度具有与原始列表相同的比例

输入:比例列表,总像素宽度

输出:像素宽度列表,其中每个宽度是一个整数,这些宽度的总和等于总宽度

代码:

var size=“1,2,3,5,7,10”。拆分(“,”)//初始比例
var totalWidth=1024;//总像素宽度
var-sizesTotal=0;
对于(变量i=0;i
  • 如果
    size
    开始时声明为数字列表,那么为什么必须调用
    parseInt()
  • 你在最后一行拼错了“长度”
  • 宽度在哪里声明
  • 这如何解释舍入问题?哦,我明白了;这是最后一行;那么,您不需要添加
    totaleft
    ,而不只是覆盖其中的任何内容吗

    • 将其抽象为一个函数可能是值得的。。。我把它清理了一下。而且我不确定
      sizesTotal!=100…
      所有的东西都是关于生活的,所以我把它弄出来

      function pixelWidths(proportions, totalPx) {
      
          var pLen = proportions.length,
              pTotal = 0,
              ratio, i;
      
          for ( i = -1; ++i < pLen; )
              pTotal += proportions[i];
      
          ratio = totalPx / pTotal;
          pTotal = 0;
      
          for ( i = -1; ++i < pLen; )
              pTotal += proportions[i] = ~~(proportions[i] * ratio);
      
          proportions[pLen-1] += totalPx - pTotal;
      
          return proportions;
      
      }
      
      pixelWidths([1,2,3,5,7,10], 1024); // => [36, 73, 109, 182, 256, 368]
      

      您的前3点是因为我从其他代码中删除了此代码,并且没有花足够的时间使其看起来独立。我试图通过不计算每个循环中的最后一个度量来解释舍入问题,但是我给最后一个度量提供了可用的宽度是的,这看起来应该是可行的。我喜欢这个把戏。谢谢
      function pixelWidths(proportions, totalPx) {
      
          var pLen = proportions.length,
              pTotal = 0,
              ratio, i;
      
          for ( i = -1; ++i < pLen; )
              pTotal += proportions[i];
      
          ratio = totalPx / pTotal;
          pTotal = 0;
      
          for ( i = -1; ++i < pLen; )
              pTotal += proportions[i] = ~~(proportions[i] * ratio);
      
          proportions[pLen-1] += totalPx - pTotal;
      
          return proportions;
      
      }
      
      pixelWidths([1,2,3,5,7,10], 1024); // => [36, 73, 109, 182, 256, 368]
      
      ~~'2'; // => 2
      ~~'2.333'; // => 2
      ~~null; // => 0