1

我知道有人问过与此类似的问题,但我已经查看了这些问题,并且对于 a)它们是如何工作的,以及 b)我如何调整它们以适应我的目的,我感到非常困惑。因此,我开始了一个新问题。

我有一个只有 4 个索引的数组,每个索引都有一个数字。我的目标是找到该数组中的最小值并返回该最小值的索引。这一直不是问题...

当最低值在多个索引中重复时,就会出现问题。

在这种情况下,我希望能够首先在数组上运行“计数”以找出最小值是否重复,然后如果计数大于 1,则执行以下操作:查找重复值的索引, 最后我需要取这些指数的值并在找到它们之间的最小值之前进行进一步的计算。

例子:

    array[ 12.44 , 10.33 , 17.45 , 10.33]
    //First I need a count to find the number of times the lowest value (10.33) occurs
    //Then I would like a function to return either a string containing 1,3 to 
    //represent the indices, or an array[ 1 , 3 

如果这个问题已经得到回答,我再次道歉,但请你解释一下答案,因为我反复尝试理解他以前的答案并且无法取得进展。

为什么使用js在数组中查找重复值这么复杂?

提前感谢您的帮助和时间!

约翰

4

3 回答 3

1

用纯 JS 这种方式怎么样?

var myArr = [12.44 , 10.33 , 17.45 , 10.33];  //Your array    
var lowest = Math.min.apply(Math, myArr);     //Find the lowest number
var count = 0;                                //Set a count variable
var indexes = [];              //New array to store indexes of lowest number

for(var i=0; i<myArr.length;i++) //Loop over your array
{
    if(myArr[i] == lowest) //If the value is equal to the lowest number
    {
       indexes.push(i); //Push the index to your index array
       count++;         //Increment your counter
    }
}
alert(count);           //2
alert(indexes);         //1, 3

和一个工作的 jsFiddle这里

于 2012-04-27T09:20:52.647 回答
0

您可以创建一个过滤器,过滤掉所有重复项,然后在临时数组上运行一些魔法以获得所需的数字。例如

var arr      = [ 12.44 , 10.33 , 17.45 , 10.33],
    filtered = [ ],
    lowest;

arr.forEach(function( value ) {
    if( filtered.indexOf( value ) === -1 )
        filtered.push( value );
});

lowest = Math.min.apply( null, filtered );  // 10.33
arr.indexOf( lowest ); // 1
于 2012-04-27T09:11:42.323 回答
0
var arr = [12.44, 10.33, 17.45, 10.33],
    lowest = Math.min.apply(Math, arr), //.. 10.33
    index = $.map(arr, function(o,i) { if (o === lowest) return i; }), //.. [1,3]
    numOfTimes = index.length; //.. 2

解释:

Math.min是一个函数。您可以调用任何函数并使用function.call(context, param1, param2, paramEtc...)或更改该函数的上下文function.apply(context, param[])

Math.min不允许我们通过调用传入数组Math.min(arr),因为它需要一个逗号分隔的参数列表;这就是为什么我们有这种有趣的语法Math.min.apply(Math, arr)

$.map()只是一个方便的迭代器,您可以使用任何方法来获取索引数组

于 2012-04-27T09:13:20.127 回答