使用 reduce() 查找数组中第二大的元素
Using reduce() to find the second largest element in the array
是否可以使用reduce 来查找数组中的第二大元素?不使用排序方法。像这样:
Obs:下面的代码用于查找最大值。我需要找到第二大值并想使用 reduce()。不使用排序方法
array1 = [12, 16, 1, 5]
array2 = [8, 4, 5, 6];
function largestElement(array){
largestE = array.reduce((acc,currentValue) => currentValue > acc ? currentValue : acc )
return largestE
}
console.log(largestElement(array1))
console.log(largestElement(array2))
没有这样做:
function secondLargest(array){
array.sort((a,b) => a-b)
return array[array.length-2]
}
是的,您可以通过多种方式做到这一点。这是一种解决方案:
const array1 = [5, 5, 1, 1, 2, 3, 4];
const array2 = [12,16,1,5];
const reducer = (accumulator, currentValue, idx, a) => {
let larger = a.filter(n=>n>currentValue) // Fetch larger values than n
.filter((n,i,a) => a.indexOf(n) === i); // Get Unique values
if(larger.length === 1){
// if there is only one unique value larger than n, n is your answer.
return accumulator = currentValue;
} else {
return accumulator = accumulator; // else preserve the accumulator value
}
}
console.log(array1.reduce(reducer));
console.log(array2.reduce(reducer));
我觉得越简单越好,
我将只创建两个变量并比较数组的每个元素
先在循环外做两个变量
在循环内只询问当前数字是否大于 larger
- 如果它更大,则将值分配给最大,并使secondLargest成为最大的值
2)如果它不大于largest但小于secondLargest,那么将那个numbe传递给secondLargest,请看下面的代码
function FindSecondLargest() {
largest = 0
secondLargest =0
for (let i =0 i<array.length, i++)
{
if(array[i] >largest)
{
secondLargest = largest
largest=array[i]
}else if(array[i] <secondLargest){
secondLargest=array[i]
}
}
return secondLargest;
}
是否可以使用reduce 来查找数组中的第二大元素?不使用排序方法。像这样:
Obs:下面的代码用于查找最大值。我需要找到第二大值并想使用 reduce()。不使用排序方法
array1 = [12, 16, 1, 5]
array2 = [8, 4, 5, 6];
function largestElement(array){
largestE = array.reduce((acc,currentValue) => currentValue > acc ? currentValue : acc )
return largestE
}
console.log(largestElement(array1))
console.log(largestElement(array2))
没有这样做:
function secondLargest(array){
array.sort((a,b) => a-b)
return array[array.length-2]
}
是的,您可以通过多种方式做到这一点。这是一种解决方案:
const array1 = [5, 5, 1, 1, 2, 3, 4];
const array2 = [12,16,1,5];
const reducer = (accumulator, currentValue, idx, a) => {
let larger = a.filter(n=>n>currentValue) // Fetch larger values than n
.filter((n,i,a) => a.indexOf(n) === i); // Get Unique values
if(larger.length === 1){
// if there is only one unique value larger than n, n is your answer.
return accumulator = currentValue;
} else {
return accumulator = accumulator; // else preserve the accumulator value
}
}
console.log(array1.reduce(reducer));
console.log(array2.reduce(reducer));
我觉得越简单越好, 我将只创建两个变量并比较数组的每个元素 先在循环外做两个变量 在循环内只询问当前数字是否大于 larger
- 如果它更大,则将值分配给最大,并使secondLargest成为最大的值 2)如果它不大于largest但小于secondLargest,那么将那个numbe传递给secondLargest,请看下面的代码
function FindSecondLargest() {
largest = 0
secondLargest =0
for (let i =0 i<array.length, i++)
{
if(array[i] >largest)
{
secondLargest = largest
largest=array[i]
}else if(array[i] <secondLargest){
secondLargest=array[i]
}
}
return secondLargest;
}