如何从多个数组中删除最小数字

时间:2017-07-27 23:06:44

标签: javascript arrays algorithm

//这是我的代码:

    function removeSmallest(arr) {
      var min = Math.min.apply(null, arr);
      return arr.filter((e) => {return e != min});
      }

      console.log(removeSmallest([2,1,3,5,4], [5,3,2,1,4], [2,2,1,2,1]));

/ *问题是我需要第三个数组输出[2,2,2,1]。代码实际上是通过删除每个数组中的最小数字来做我告诉它要做的事情但是为了我的问题,我需要它只取出其中一个(如果这是有道理的)。感谢任何帮助! * /

3 个答案:

答案 0 :(得分:2)

您只需要略微改变逻辑。您可以在数组中找到最小数字,然后使用它来查找该数字的第一个索引,并删除该特定数字。

function removeSmallest(arr) {
  var min = Math.min.apply(null, arr);
  arr.splice(arr.indexOf(min), 1);

  return arr;
}

答案 1 :(得分:0)

如果你只想删除数组中的第一个匹配项,那么就像这样:

function removeSmallest(arr) {
  var min = Math.min.apply(null, arr);
  var count = 0;
  return arr.filter((e) => { 
      if(e != min || count > 0) {
          return true;
      }
      else if(e == min) {
          count++;
          return false;
      }
  });
}

答案 2 :(得分:-1)

您的代码的主要问题是,如果最小的数字有重复数据,例如您的第三个数组1中有两个[2,2,1,2,1] - 它将删除其中的每一个而不是唯一的一个。

可能的解决方案:



const removeSmallest = (...args) => {
  return args.map(v => {
    return JSON.stringify(v.sort((a, b) => a - b).slice(1));
  })
}

console.log(removeSmallest([2,1,3,5,4], [5,3,2,1,4], [2,2,1,2,1]));