我写了这个函数,它返回
-1
。
function sayHello() {
let arrayEdificiosNiveis = [11,10,10];
var indexMenor = arrayEdificiosNiveis.indexOf(Math.max(arrayEdificiosNiveis));
console.log(indexMenor);
}
sayHello();
我期望的是 0,而不是 -1。我该如何解决这个问题?
您需要扩展数组以获得最大值。否则,您将获得
NaN
作为值(通过字符串数组),并且该值不在数组中(且不可搜索)。
扩展数组将所有元素作为函数的参数(扩展语法
...
)。
在这种情况下是这样的
Math.max(...[11, 10, 10])
被评价为
Math.max(11, 10, 10)
function sayHello() {
arrayEdificiosNiveis = [11, 10, 10];
var indexMenor = arrayEdificiosNiveis.indexOf(Math.max(...arrayEdificiosNiveis));
console.log(indexMenor);
}
sayHello();
单循环解决方案:
但是为什么不使用
v > a[r] ? i : r
(感觉更自然)而不是
v <= a[r] ? r : i
问题是与索引零处的第一个元素的第一次比较。此时,
r = -1
,元素为a[r] = undefined
。
与
undefined
和 <
、<=
、>
或 >=
的关系运算符进行比较始终为 false
,这将返回 -1
的错误索引而不是零,并且此结果不会数组的任何其他元素都不会改变。
const
getFirstIndexOfMaxValue = array =>
array.reduce((r, v, i, a) => v <= a[r] ? r : i, -1);
console.log(getFirstIndexOfMaxValue([]));
console.log(getFirstIndexOfMaxValue([11]));
console.log(getFirstIndexOfMaxValue([11, 10]));
console.log(getFirstIndexOfMaxValue([11, 10, 10]));
console.log(getFirstIndexOfMaxValue([10, 11, 10]));
console.log(getFirstIndexOfMaxValue([10, 11, 10, 11]));
您的方法中的问题是您传递给函数的完整数组
Math.max
:
const arrayEdificiosNiveis = [11, 10, 10],
max = Math.max(...arrayEdificiosNiveis);
console.log(arrayEdificiosNiveis.findIndex(elem => elem === max));
如果无法使用
Spread syntax
,您可以调用函数apply
,该函数接收一个数组作为函数Math.max
的参数
function sayHello() {
const arrayEdificiosNiveis = [11, 10, 10],
max = Math.max.apply(null, arrayEdificiosNiveis),
indexMenor = arrayEdificiosNiveis.indexOf(max);
console.log(indexMenor);
}
sayHello();
你可以询问Raymond Chen。事实证明明显的 C 风格方式是最好的。也许并不奇怪 - C 风格代码很容易被 Javascript 引擎优化。
function indexOfSmallest(a) {
var lowest = 0;
for (var i = 1; i < a.length; i++) {
if (a[i] < a[lowest]) lowest = i;
}
return lowest;
}
let array=[-2, 4, 3, 2, 1, 7, 6, 10, 8, 9]; //or [1,1,1,1,1,1,1,1,1]
let result = "";
let fin = "";
let i = 0;
while (i <= array.length)
{
i++;
let temp = array[0]; //Assigning the first element of the array
let temp1 = array[i]; //Assigning the elements through iterating the array
if (temp === temp1){ // If the value of the array is same as [1,1,1,...]
fin = temp;
result = temp1;
}
else if (temp > temp1){ // assign minimum value in result variable
result = temp1;
}
else if(result < temp){ // assing minimum value in fin variable if the first element is minimum
fin = result;
}
}
if(fin < result){ // display the result
console.log(fin);
}else{ // display the result
console.log(result);
}