【问题标题】:Filter out an array with null values, underscore过滤出具有空值的数组,下划线
【发布时间】:2014-08-22 08:20:04
【问题描述】:

我有这个数组:

[null, {name:'John'}, null, {name:'Jane'}]

我想删除空值。有没有一种简单的方法可以用下划线做到这一点?

【问题讨论】:

    标签: javascript underscore.js


    【解决方案1】:

    如果数组包含空值或对象,那么您可以使用compact:

    var everythingButTheNulls = _.compact(list);
    

    NB compact 删除所有假值,因此如果数组可能包含零、假等,那么它们也将被删除。

    还可以将rejectisNull 谓词一起使用:

    var everythingButTheNulls = _.reject(array, _.isNull);
    

    【讨论】:

    • 如果你的 lodash 版本支持 _.isNil... 这将过滤 null、nan、undefined。 var everythingButTheNulls = _.reject(array, _.isNil);
    【解决方案2】:

    尝试使用_.without(array, *values),它将删除您不需要的所有值。在你的情况下 *values == null

    http://underscorejs.org/#without

    【讨论】:

    • 要删除空值,我不想没有(数组,未定义)
    【解决方案3】:

    这对你有用

    过滤器

    _.filter(arr,function (value) {
        return value!==null;
    })
    

    拒绝

    _.reject(arr,function (value) {
        return value===null;
    })
    

    【讨论】:

    • _.reject(arr, _.isNull) 可以说是更干净。或者只是 _.without(arr, null)
    【解决方案4】:

    来自下划线文档

    without_.without(array, *values) 
    Returns a copy of the array with all instances of the values removed.
    

    所以就用这个方法

    var a = [null, {name:'John'}, null, {name:'Jane'}]
    a = _.without(a, null);
    

    【讨论】:

      【解决方案5】:

      最好的解决方案是使用compact,但filter 函数在不包含特定真值测试函数时的默认行为是删除falsy

      例如:

      _.filter([null, {name:'John'}, null, {name:'Jane'}])
      

      返回一个没有空值的对象数组:

      [{name:'John'}, {name:'Jane'}]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-02
        • 1970-01-01
        • 2021-01-06
        • 2015-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-31
        相关资源
        最近更新 更多