Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Minimum - Fatal编程技术网

在javascript中查找数组中多个最小值的索引

在javascript中查找数组中多个最小值的索引,javascript,arrays,minimum,Javascript,Arrays,Minimum,我想找到数组最小值的索引 例如 问题是Math.min.apply只返回第一个索引 最小值=1,关键值=0 我想做的就是回来 min = 1 and key = [0,4,8]; 可以用Math.min.apply来做吗 var array = [1,2,3,4,1,7,8,9,1]; function findMinimumIndexes(array) { var min = Math.min.apply(Math, array); var indexes = [];

我想找到数组最小值的索引

例如

问题是Math.min.apply只返回第一个索引

最小值=1,关键值=0

我想做的就是回来

min = 1 and key = [0,4,8];
可以用Math.min.apply来做吗

var array = [1,2,3,4,1,7,8,9,1];

function findMinimumIndexes(array) {
    var min = Math.min.apply(Math, array);
    var indexes = [];

    array.forEach(function(item, idx, arr) {
        if (item === min) {
            indexes.push(idx);
        }
    });

    return indexes;
}

console.log(findMinimumIndexes(array));
函数声明变量索引并为其分配一个空数组,然后使用forEach调用填充值与min匹配的元素索引

请注意,这只适用于基本值,因为它使用===检查等价性。 要使其在与您正在寻找的阵列或对象“完全相同”的阵列或对象上工作,您需要更严格的实现

var array = [1,2,3,4,1,7,8,9,1];
var min = Math.min.apply( Math, array )

var arrayWithIndex = array.map(function(element, index) {
    return element + "-" + index;
});

var minValues = arrayWithIndex.filter(function(element) {
    return Number(element.split('-')[0]) === min;
});

var keys = minValues.map(function(element) {
    return Number(element.split('-')[1]);
});
我的算法是将原始数组映射为包含一个新数组,该数组同时包含数字和索引。然后,我将过滤该数组中的元素,其中的数字等于min,然后再次映射以查找索引

您还可以链接这些方法

return array.map(function(element, index) {
    return element + "-" + index;
})
.filter(function(element) {
    return Number(element.split('-')[0]) === min;
}).
.filter(function(element) {
    return Number(element.split('-')[1]);
});
Array.prototype.reduce应该完成这项工作

var数组=[1,2,3,4,1,7,8,9,1]; 函数getMinKeysarray{ var min=Math.min.applyMath,数组; return array.reducefunction r,a,i{ a==min&r.pushi; 返回r; }, []; }
文件。书写;为什么a==min&&r.pushi;?它是否带来了性能改进?与什么相比?写a===min&&r.pushi;如果a==最小r.pushi。
return array.map(function(element, index) {
    return element + "-" + index;
})
.filter(function(element) {
    return Number(element.split('-')[0]) === min;
}).
.filter(function(element) {
    return Number(element.split('-')[1]);
});