脚高(cm)和鞋码(欧盟)之间的函数

时间:2017-02-07 10:46:28

标签: javascript function math size

在网上有很多脚高和鞋码之间的转换表。就像这里http://www.shoesize.com/men/sizechart/我想问一下,这两个参数之间有数学函数。功能应该如下:

function getShoeSize(height in cm){

  ...type magic here...

  return shoeSize; //size in EU format
}

2 个答案:

答案 0 :(得分:2)

我认为没有一种简单的数学方法(我确信这是可能的,但对于普通开发者来说可能是不可读的)。

我建议你做什么,哪个容易建立。是你制作了一系列鞋码(所有尺码的例子都可以在http://www.shoesizingcharts.com/和更多网站上找到)。并使用该数组将cm转换为euro size

数组看起来像:

var shoeSizeMap = [
  { cm: 20.8, euroSize: '35' },
  { cm: 21.3, euroSize: '35' },
  { cm: 21.6, euroSize: '35/36' },
  ... etc
]

并使用函数找到它:

function findEuroSizeByCm(cm) {
  var result = shoeSizeMap.find(function(shoeSize) {
     return shoeSize.cm == cm;
  });

  return result ? result.euroSize : 'unknown size';
}


findEuroSizeByCm(20.8); // returns 35

PS。请注意,如果您的数据源也提供字符串,我可以在示例中输入数字作为“浮点数”,您可能希望将其作为字符串进行比较(只需将cm: 20.8更改为cm: '20.8')。

答案 1 :(得分:1)

很明显依赖性不是很顺利: enter image description here

因此,您可以在二进制搜索中找到阵列中最近的cm大小并检查邻居大小是否更接近(例如,对于26.5 cm二进制搜索,可以找到表格值26作为较小值,但26.7更接近,因此42.5大小适合更好)。或者使用找到上限值的二进制搜索实现。

编辑:由于阵列非常小,使用线性搜索更简单。伪代码:

 idx = 0
 while (CmSize[idx] < Foot_len) && (idx < CmSize.Length)
   idx++
 return EUSize[idx]