如何从Javascript中的数组中获取最小的差异值

Posted

技术标签:

【中文标题】如何从Javascript中的数组中获取最小的差异值【英文标题】:How to get smallest difference value from an array in Javascript 【发布时间】:2018-02-04 08:36:41 【问题描述】:

我有一个包含多个值的数组。喜欢

var values = [1.5, -1, 0 , 5, 5.5, -4];

在这种情况下,我想要 0,因为 0 是与 0 的最小差异。

var values = [1.5, -1 , 5, 5.5, -4];

在这种情况下,我想要 -1,因为 0 是与 0 的最小差异。

var values = [1, -1 , 5, 5.5, -4];

在这种情况下,我想要 +1

提前致谢

【问题讨论】:

你会如何用纸和铅笔手工完成这项工作? 快速提问,你为什么要在第一个例子中 +1? -1 也可以接受吗? @M.Koval 在那种情况下我想要正数 【参考方案1】:

你可以使用reduce来创建这样的函数。

function getMin(data) 
  return data.reduce(function(r, e, i) 
    let absR = Math.abs(r), absE = Math.abs(e);
    if (absR > absE || i == 0 || (absR == absE && e > r)) r = e
    return r
  )


console.log(getMin([1.5, -1, 0, 5, 5.5, -4]))
console.log(getMin([1.5, -1, 5, 5.5, -4]))
console.log(getMin([1, -1, 5, 5.5, -4]))
console.log(getMin([-1, 1, 5, 5.5, -4]))

【讨论】:

如果我的问题有任何错误,请您编辑我的问题【参考方案2】:

试试这样的:

function getMin(arr)
  if(arr.length == 0)return undefined;
    var min = arr[0];
    for(var i =0; i < arr.length; i++)
        if(Math.abs(arr[i]) < Math.abs(min))
        min = arr[i];
      
      else if(Math.abs(arr[i]) == Math.abs(min) && arr[i] > 0)
        min = arr[i]
    

  return min


如果这不是您想要的,请告诉我,我可以更改答案。

【讨论】:

以上是关于如何从Javascript中的数组中获取最小的差异值的主要内容,如果未能解决你的问题,请参考以下文章

javascript如何获取数组中的最大值和最小值

比较两个对象数组并获取 Javascript 中的差异

从 JavaScript 数组中获取对象值的最大值和最小值

javascript中知道一个数组中的一个元素的值,如何获取数组下标

如何从 JavaScript 中的对象数组中获取不同的值?

在迭代python时从剩余数组中找到2个元素的最小差异