【问题标题】:Create an array using longest length of arrays passed to a function, using Math.max?使用传递给函数的最长数组长度创建一个数组,使用 Math.max?
【发布时间】:2016-11-11 13:34:54
【问题描述】:

我正在尝试构建一个长度等于传递给函数的最长数组的新数组。可以有无限数量的数组传递给函数,这就是我尝试使用Math.max 的原因。

我使用循环解决了这个问题...:

function sumInternalValues() {
  let arrays = Array.from(arguments);
  let longest = 0;

  arrays.forEach(arr => {
    longest = (arr.length > longest) ? arr.length : longest;
  })

  let newArr = new Array(longest);
  //... do other things but for sake of this question, return here now
  return newArr.length;
}

let arr1 = [1, 2, 3, 4];
let arr2 = [5, 6, 7, 8, 9, 10];

console.log(sumInternalValues(arr1, arr2));

但是我怎样才能让 Math.max 工作呢?

function sumInternalValues() {
    let newArr = new Array(Math.max.apply(Math, arguments.length?));
}

注意:我将根据guidelines here 回答我自己的问题。我花了相当多的时间试图得到这个,但没有在 SO 上找到太多支持。

【问题讨论】:

    标签: javascript arrays ecmascript-6


    【解决方案1】:

    您可以通过使用array.from() 将参数捕获为数组,然后映射结果数组以获得长度来做到这一点。然后apply 将该数组传递给Math.max 函数:

    function sumInternalValues() {
      let args = Array.from(arguments);
      let newArr = new Array(Math.max.apply(Math, args.map(a => a.length)));
      // ... do some other things, but for the sake of this question, return here
      return newArr.length
    }
    
    let arr1 = [1, 2, 3, 4];
    let arr2 = [5, 6, 7, 8, 9, 10];
    
    console.log(sumInternalValues(arr1, arr2));

    【讨论】:

      【解决方案2】:

      一个密集的数组:

      let denseArr = Object.assign([], arr1, arr2).fill(undefined);
      

      一个稀疏数组:

      let sparseArr = [];
      sparseArr.length = Math.max(...[arr1, arr2].map(arr => arr.length));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-14
        • 2020-08-03
        相关资源
        最近更新 更多