Javascript拼接方法问题

时间:2016-05-14 11:52:29

标签: javascript array-splice

我是新来的:)

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

我试图从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);

2 个答案:

答案 0 :(得分:0)

splice()的参数是要开始删除的数组索引,以及要删除的元素数。 maxTemp是数组值,而不是索引,因为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);

答案 1 :(得分:0)

如果您只想返回第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