【问题标题】:JavaScript/ES 6: Compare arrays length in an ObjectJavaScript/ES6:比较对象中的数组长度
【发布时间】:2018-03-14 05:52:00
【问题描述】:

我有一个包含多个这样的数组的对象

someObj = {
    array1:['a', 'b'],
    array2:['a', 'b', 'c'],
    array3:['a', 'b', 'c', 'd']
}

JS/ES6 中是否有任何内置方法或属性可以返回最大数组或最大数组的长度?请推荐

【问题讨论】:

  • 为此,您需要迭代每个值,并比较数组的长度。
  • Math.max(...Object.values(someObj).map(arr => arr.length))
  • @Bergi 使用Object.values 不会更安全,因为 IE 不支持它。我们可以改用maps
  • @RajaprabhuAravindasamy 谁在乎 IE?安装一个 polyfill,或者 - 更重要的是 - 为扩展语法使用一个转译器。请注意,OP 要求使用 ES6,他可能对 ES8 也很好。
  • @bergi 总是很高兴听到这样的 cmets。如今,所有严肃的 JS 开发都使用转译器。现在已经没有需要编写 ES5 了。这就像编写汇编语言。哦等等,ES5 是网络的汇编语言。不打算写我的人类。它是一个转译器目标。或者应该是。

标签: javascript ecmascript-6


【解决方案1】:

您可以使用Array.prototype.reduce 并检查累加器的值与数组长度。

使用Object.values()获取数组的所有值。

var someObj = {
    array1:['a', 'b'],
    array2:['a', 'b', 'c'],
    array3:['a', 'b', 'c', 'd'],
    array4:['a', 'b', 'c']
}

var maxLength = Object.values(someObj).reduce((a,e) => { return a > e.length ? a:e.length}, 0);

console.log(maxLength);

【讨论】:

  • (a, e) => Math.max(a, e.length)
【解决方案2】:

您可以使用Object.values 获取任何对象的所有值。这是一个简洁的 oneshot,它将返回最长的列表以及 reduce

const longestList = Object.values(someObj)
  .reduce((longest, list) => list.length > longest.length ? list : longest)

【讨论】:

    【解决方案3】:

    您可以简单地使用 for 循环并遍历它来比较数组的长度。

        var someObj = {
        array1:['a', 'b'],
        array2:['a', 'b', 'c'],
        array3:['a', 'b', 'c', 'd']
        }
    
        var max=0;
        for(x in someObj){ 
           someObj[x].length > max ? max=someObj[x].length : max;
        }
    
        console.log(max);

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多