【问题标题】:Get the last non-null element of an array获取数组的最后一个非空元素
【发布时间】:2018-08-17 20:31:00
【问题描述】:

有一个这样的数组

myArray = ["test", 32.5, 11.3, 0.65, 533.2, null, 423.2, null, null];

有没有办法获取最后一个非空元素?

在这种情况下应该是423.2

【问题讨论】:

标签: javascript arrays


【解决方案1】:

这样做最简单的方法是使用.filter 过滤掉null 项,然后使用.slice 获取最后一个元素:

lastNonNull = myArray.filter(x => x != null).slice(-1)[0]
console.log(lastNonNull) // 432.2

稍微分解一下:

myArray
    .filter(x => x != null)    // returns ["test", 32.5, 11.3, 0.65, 533.2, 423.2]
    .slice(-1)                 // returns [423.2]
    [0]                        // returns 423.2 

【讨论】:

    【解决方案2】:

    另一种方式是Array#reduce():

    var myArray = ["test", 32.5, 11.3, 0.65, 533.2, null, 423.2, null, null];
    var last = myArray.reduce((acc, curr) => curr ? curr : acc);
    console.log(last);

    【讨论】:

      【解决方案3】:

      使用reversefind

      ["test", 32.5, 11.3, 0.65, 533.2, null, 423.2, null, null].reverse().find( s => s != null )
      

      或者只有一个reduceRight

      var arr = ["test", 32.5, 11.3, 0.65, 533.2, null, 423.2, null, null]
      arr.reduceRight( (a,c) => ( c != null && a == null ? c : a) , null)
      

      【讨论】:

      • 这很棒而且非常简洁,但如果列表包含“虚假”项目,例如0"".
      • @AaronChristiansen 立即查看
      • 这样更好;赞成。比我的解决方案简洁多了!
      【解决方案4】:

      您可以使用filter 过滤非空元素并使用pop 获取最后一个元素。

      let myArray = ["test", 32.5, 11.3, 0.65, 533.2, null, 423.2, null, null];
      let result = myArray.filter( v => v !== null ).pop();
        
      console.log( result );

      【讨论】:

        猜你喜欢
        • 2022-09-29
        • 1970-01-01
        • 1970-01-01
        • 2016-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        相关资源
        最近更新 更多