【问题标题】:Javascript splice method issue with thisJavascript拼接方法问题与此
【发布时间】:2016-05-14 11:52:28
【问题描述】:

如果有人可以帮助我解决我的问题,我会很高兴:

我正在尝试从 nums 数组中删除当前的最大数量,但无法完成。

function getNthLargestNum(nums, nth) {
  debugger;
  var maxNums = [];
  for (var i = 0; i < nth; i++) {
    var nthMax = 0;
    var maxTemp = 0;

    for (var j = 0; j < nums.length; j++) {
      if (maxTemp < nums[j]) {
        maxTemp = nums[j];
        //splice();
      }
    }
    nums.splice(maxTemp, maxTemp[j]);
    maxNums.push(maxTemp);
  }
  nthMax = maxTemp;
  return nthMax;
}
var nums = [4, 5, 6, 8, 40, 60, 54, 32, 8, 1];
//var nums = [4 , 5 , 6 , 8 , 40 , 3 , 8 , 1];
var res = getNthLargestNum(nums, 3);
``
console.log(res);

【问题讨论】:

  • 不清楚您的预期输出是什么。您的数组是否必须保持相同的顺序,因为如果没有,还有更简单的方法。
  • 请添加想要的输出。
  • maxTemp[j] 毫无意义。 maxTemp 是一个数字,而不是一个数组。
  • getNthLargestNum 在问题的上下文中也没有意义。您是打算退回它们还是删除它们?
  • 对不起,我需要得到第三大数字,即:40 在此代码中,

标签: javascript array-splice


【解决方案1】:

splice() 的参数是要开始删除的数组索引,以及要删除的元素数。 maxTemp 是数组值,而不是索引,anx maxTemp[j] 完全没有意义,因为maxTemp 不是数组。

您需要使用另一个变量来保存找到最大元素的索引。每次更新 maxTemp 时,也会使用当前索引更新 maxIndex。然后你在拼接中使用它。

似乎不需要maxNums 数组;你推动它,但永远不要将它用于任何事情。而nthMax 只是在你返回它之前保存maxTemp 的最后一个值——你可以简单地返回maxTemp 本身。

function getNthLargestNum(nums, nth) {
  debugger;
  var nthMax;
  for (var i = 0; i < nth; i++) {

    var maxTemp = nums[0];
    var maxIndex = 0;
    for (var j = 1; j < nums.length; j++) {
      if (maxTemp < nums[j]) {
        maxTemp = nums[j];
        maxIndex = j;
      }
    }
    nums.splice(maxIndex, 1);
  }
  return maxTemp;
}
var nums = [4, 5, 6, 8, 40, 60, 54, 32, 8, 1];
//var nums = [4 , 5 , 6 , 8 , 40 , 3 , 8 , 1];
var res = getNthLargestNum(nums, 3);

console.log(res);

【讨论】:

    【解决方案2】:

    如果您只想返回第 n 个最大的数字,您可以这样做:

    function getNthLargestNum(nums, nth) {
      return nums.slice(0).sort((a, b) => b - a)[nth - 1];
    }
    
    var nums = [4, 5, 6, 8, 40, 60, 54, 32, 8, 1];
    getNthLargestNum(nums, 3); // 40
    

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 2010-12-24
      • 2019-11-11
      • 2011-09-24
      • 2022-01-10
      • 1970-01-01
      • 2011-09-04
      相关资源
      最近更新 更多