【问题标题】:Lodash remove from string arrayLodash 从字符串数组中移除
【发布时间】:2023-04-10 05:41:02
【问题描述】:

我有一个字符串数组,想立即删除其中的一些。但它不起作用

var list = ['a', 'b', 'c', 'd']
_.remove(list, 'b');
console.log(list); // 'b' still there

我猜这是因为_.remove 函数接受字符串作为第二个参数并认为这是属性名称。在这种情况下如何让 lodash 进行相等性检查?

【问题讨论】:

    标签: javascript lodash


    【解决方案1】:

    您的另一个选择是使用 _.pull,它与 _.without 不同,它不会创建数组的副本,而只会修改它:

    _.pull(list, 'b'); // ['a', 'c', 'd']
    

    参考:https://lodash.com/docs#pull

    【讨论】:

      【解决方案2】:

      正如 Giuseppe Pes 指出的那样,_.remove 期待一个函数。一个更直接的方法是使用 _.without 代替,它确实需要元素直接删除。

      _.without(['a','b','c','d'], 'b');  //['a','c','d']
      

      【讨论】:

        【解决方案3】:

        函数 _.remove 不接受字符串作为第二个参数,而是为数组中的每个值调用的谓词函数。如果函数返回true,则从数组中删除该值。

        Lodas 文档:https://lodash.com/docs#remove

        从数组中删除谓词返回真值的所有元素 返回已删除元素的数组。谓词绑定到 thisArg 并使用三个参数调用:(值、索引、数组)。

        所以,如果你想从你的数组中删除b,你应该是这样的:

        var list = ['a', 'b', 'c', 'd']
        _.remove(list, function(v) { return v === 'b'; });
        ["a", "c", "d"]
        

        【讨论】:

        • 返回值应该是 v == 'b',而不是 v !== 'b'
        • @trevor 没有。那将只匹配b。我们想要相反的
        • 我认为他们只是想根据代码中的注释删除“b”:“b 仍然存在”
        • 是的,我想从我的列表中删除“b”。所以这里应该是相等的表达式
        • 另外,我发现_.without 完全符合我的需要,但创建了一个数组副本
        猜你喜欢
        • 2016-06-07
        • 1970-01-01
        • 1970-01-01
        • 2013-03-02
        • 1970-01-01
        • 1970-01-01
        • 2018-07-05
        • 2021-04-27
        • 2018-04-12
        相关资源
        最近更新 更多