数组重复javascript

时间:2019-02-06 23:38:20

标签: javascript

该代码应返回数组中的第二大数字。但是,我注意到,如果数组中有重复的元素,则此代码将不起作用。当我将数组设置为[2、3、6、6、5]时,它将返回第二个最大数字。它应该返回5作为第二大数字,而6是第一大数字。

我在else中添加了一部分代码,以查看是否可以删除重复项,但没有成功,它仍然返回6而不是5。

const nums = [2, 3, 6, 6, 5];

function getSecondLargest(nums) {
var firstLargest = nums[0];
var secondLargest = nums[0];

for(var i = 1; i < nums.length; i++){
    if (nums[i] > secondLargest){
        secondLargest = firstLargest;
        firstLargest = nums[i];
     }

    else if ((secondLargest === nums[i]) || (firstLargest === nums[i])){
        delete nums[I];

     }
    else{
        nums[i] = secondLargest;    
    }

}
return secondLargest;

} console.log(getSecondLargest(nums));

4 个答案:

答案 0 :(得分:1)

在评估secondLargest时只需测试是否相等。

const nums = [2, 3, 6, 6, 5];

function getSecondLargest(nums) {
  var largest = 0;
  var secondLargest = 0;

  nums.forEach(n => {
    if (n > largest ) {
      secondLargest = largest;
      largest = n;
      
    } else if ( n > secondLargest && n !== largest ){
      secondLargest = n;
    }
  });

  return secondLargest;

}

console.log(getSecondLargest(nums));

答案 1 :(得分:1)

如果要对数组中的项目进行重复数据删除,一种简单的方法是将其转换为Setnew Set(array),然后根据需要从中创建一个新数组:{{1 }}。将所有内容放在一起:Array.from(set)

现在,从给定数组中获取第二大数字的另一种方法可能是:

  1. 删除所有重复项;
  2. 对数组进行排序;
  3. 获取倒数第二个值;

类似以下内容:

Array.from(new Set(array))

答案 2 :(得分:0)

我有一个函数用于获取数组中的不同项目,如果您然后对这个不同的列表进行排序,则第二大的将是列表中的第二个项目。

const nums = [2, 3, 6, 6, 5];

const distinct = (array) =>
  array
    ? array.reduce((results, item) => {
        if (!results.some((i) => i === item)) {
          results.push(item);
        }
        return results;
      }, [])
    : array;

const getSecondLargest = array => array && array.length >= 2 ? distinct(array).sort((a,b) => b - a)[1] : undefined;

console.log(getSecondLargest(nums));

答案 3 :(得分:0)

您可以首先$ kubectl get deploy test -o=jsonpath='{.spec.template.metadata.labels.customProp}' 数组,以便剩下仅包含不同值的数组。接下来,您可以过滤后的数组,filter,然后sort在已排序数组的第二个索引处的数字:

return