当前位置: 首页 > 知识库问答 >
问题:

为什么这种深度展平数组的常见JavaScript方法不能普遍工作?[副本]

郜振国
2023-03-14

我遇到了一个有趣的代码挑战:“创建一个接受数组并返回数组中所有项之和的函数。”

我的解决方案是:

function sumArray(arr) {
    var merged = [].concat.apply([], arr);
    var sum = 0;
    merged.forEach(function(item) {
        sum = sum + item;
    });
    return sum;
}

问题是上述解决方案在以下情况下失败:sumArray([1[2[1]],3]),7,因为展平方法不够深入。具体地说,在上述情况下,console.log(merged)[1,2,1,3]

什么样的扁平方法能达到必要的深度?

共有1个答案

屈星腾
2023-03-14

使用具有无限深度或实际深度(如果已知)的数组#平()。

function sumArray(arr) {  
   return arr.flat(Infinity).reduce((a,b) => a+b)
}

console.log(sumArray([1, [2, [1]], 3]))
 类似资料:
  • chrome浏览器 onclick链接 O:https://www.w3schools.com窗口打开 X:about:空白窗口打开

  • 我试图在一个变量中保存得分为80分或80分以上的学生的姓名,但我无法使用filter进行保存,它返回整个对象,尽管我指定只打印这些对象的键值,即这些学生的姓名。 我的代码: 我怎样才能得到得分在80分以上的学生的名字?

  • 我用PHP编写了这个脚本: $lang是en。但是当我调用函数如as

  • 我已经为基于数组的队列编写了一个代码。它的行为非常奇怪,就像我使用for循环将0,1,2,3,4排队一样,但是插入队列的是0,0,1,2,3。 另外,出列时会抛出,我不知道为什么。 我使用的排队逻辑是,我把元素放在一个简单的数组中。额外的一点是,如果大小接近容量的一半,我会增加数组的容量。 对于出列,如果大小小于容量的三分之一,我将减小容量。我还为popped保留了一个计数器,它从数组的开头弹出元

  • 我正在使用Java NIO,由于某种原因,我无法获得files.isHidden()来返回正确的布尔值。程序只是检查目录是否隐藏,如果隐藏,则使其可见,如果不隐藏,则使其隐藏。这就是我所拥有的: 它继续返回false并隐藏目录,尽管目录被隐藏。下面的代码使用旧的File类和Path类可以很好地工作。

  • 问题内容: 我有以下代码: 我希望它能打印a = 2 b = 1,但它却打印相反的东西。因此很明显,swap方法不会交换a和b值。为什么? 问题答案: 这与整数的不变性无关。它与 Java是值传递 ,该死 的事实有关! (不烦恼,只是文章标题:p) 总结一下:您实际上不能在Java中创建交换方法。您只需要在需要的地方自己进行交换即可。反正这只是三行代码,所以应该不成问题:)