【问题标题】:Return Array position of lowest number (not negative)返回最小数字的数组位置(非负数)
【发布时间】:2012-02-01 03:42:43
【问题描述】:

我需要返回最接近零的元素的位置,而不是负数。

我有 4 个卷筒尺寸(英寸)来切割胶片。我正在尝试输入一个宽度变量并从数组的元素中减去,最接近 0 的值将返回最佳卷筒尺寸的数组位置。我希望这是有道理的。谢谢。

  var width = ""

var rollArray = [36, 48, 60, 72]
            var newArray = []
            for(i in rollArray){ newArray.push ((rollArray[i]) - width) }

alert(newArray);

返回宽度减去每个元素,现在我需要找到如何返回最小值数组位置,以便我可以从等效的 rollArray 位置获取滚动大小。

【问题讨论】:

  • 请注意,作为正确做法,不要使用for-in 在 JavaScript 中迭代数组。它的目的是迭代对象属性。而是使用for (var i=0; i<rollArray.length; i++) 如果将任何道具或方法添加到 Array 原型中,您将从for-in 得到奇怪的结果。
  • 那么使用你的例子,你想要返回什么? 0 因为 36 最接近于零?

标签: javascript arrays


【解决方案1】:
var width = 41;
var rollArray = [36, 48, 60, 72];
var closest = rollArray.filter(function(ele){return ele-width >= 0}).sort()[0];

【讨论】:

  • 天才,太棒了!非常感谢!
【解决方案2】:
var width = ""

var rollArray = [36, 48, 60, 72]
            var newArray = []
            var min=1000000 //a very large number that you know it's larger than (rollArray[i]) - width)
            var minIndex=-1
            for (var i=0; i<rollArray.length; i++){ newArray.push ((rollArray[i]) - width) 
            if (min< rollArray[i]) - width &  rollArray[i]) - width >0)
            {
                            min = rollArray[i]) - width;
                            minIndex = i;
            }
}
alert (minIndex);
alert(newArray);

【讨论】:

  • 还有比这更简单的方法。但这是一种有趣的方法
【解决方案3】:
var width = 37;
var rollArray = [36, 48, 60, 72];
var closest = null;
for (var i=0; i<rollArray.length; i++)
{
    if (rollArray[i] >= width)
    {
        if (closest == null || rollArray[i] <= rollArray[closest])
        {
            closest = i;
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2012-02-22
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    相关资源
    最近更新 更多