【问题标题】:Why does this reduction not return -2?为什么这种减少不返回-2?
【发布时间】:2017-08-17 04:41:58
【问题描述】:

我正在尝试从 JavaScript 数组中的序列返回最小的负数,或者在没有负数的情况下返回 -1。这是我的代码:

console.log([1,2,3,-2,4].reduce((a,b) => {return b<0?(b<a?b:a):-1}))

为什么返回 -1 而不是 -2? -2 不与之前的 -1 值进行检查并返回吗?

任何线索都可能受到赞赏。

谢谢,

【问题讨论】:

标签: javascript math reduce


【解决方案1】:

如果元素小于给定的初始值,您可以返回检查结果。

console.log([1, 2, 3, -2, 4].reduce((a, b) => a < b ? a : b, -1));

【讨论】:

  • 如果数组中存在 -0.5 则失败
  • 因为 -0,5 大于 -1 的起始值。如示例所示,此解决方案适用于整数。
【解决方案2】:

你可以通过在 reduce 中打印来检查它

console.log([1,2,3,-2,4].reduce((a,b) => {
    console.log(a, b, b<0?(b<a?b:a):-1);
    return b<0?(b<a?b:a):-1
}))

当 a = -2 且 b = 4 时,您的语句返回 -1,因为 b > 0,您可以使用

解决此问题

console.log([1,2,3,-2,4].reduce((a,b) => {
    console.log(a, b, a<0?(b<a?b:a):-1);
    return a<0?(b<a?b:a):-1
}))

【讨论】:

    【解决方案3】:

    您可以将数组减少到最小的数字,然后基于此返回值,如下所示:

    var arr = [1,2,3,-2,4].reduce((a,b) => {return b<a?b:a});
    if(arr[0] < 0)
      console.log(arr[0]);
    else
      console.log(-1);

    您还可以使用.sort() 对数组进行排序,然后检查 arr[0] 并根据该值返回值。

    【讨论】:

      【解决方案4】:

      你忘了给出初始值,它应该是这样的:

      [1,2,3,-2,4].reduce((a,b) => b<0 ? (b<a?b:a) : a, -1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-19
        • 1970-01-01
        • 2014-07-18
        • 1970-01-01
        • 2015-02-12
        • 1970-01-01
        • 2012-08-04
        • 2013-08-26
        相关资源
        最近更新 更多