【问题标题】:Recursive loop using lodash使用 lodash 的递归循环
【发布时间】:2017-03-08 23:49:54
【问题描述】:

我正在尝试使用 lodash 操作 n 级深度数组/对象。递归映射函数或使用循环不是一个完美的解决方案。

我有这样的示例对象,键,它可以是数组或对象。我想使用循环它单调乏味的方式来操纵键值。我是否可以使用 lodash 将值完全更改为布尔值或其他值。

var a = {key1:true, key2:true, key3:[{key1:true, key5:true}], key6:true};

【问题讨论】:

    标签: javascript lodash


    【解决方案1】:

    您可以使用cloneDeepWith 来达到相同的效果。

    var result = _.cloneDeepWith(a, function(v) {
      if(!_.isObject(v)) {
        return false;
      }
    });
    

    var a = {
      key1: true,
      key2: true,
      key3: [{
        key1: true,
        key5: true
      }],
      key6: true
    };
    
    var result = _.cloneDeepWith(a, function(v) {
      if(!_.isObject(v)) {
        return false;
      }
    });
    
    console.log(result);
    body > div { min-height: 100%; top: 0; }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

    【讨论】:

    • 这实际上不起作用,因为回调只会为整个对象调用一次
    • @DanielKhoroshko 你试过运行 sn-p 吗?它绝对有效。此外,它不仅被调用一次,而且在遍历整个对象树之前都会被调用。
    • 但是如果你想修改所有的键而不克隆呢?我问的是一个非常大的树,它由每个函数组成,每个函数都应该作为 binded 函数重新保存到 this 上下文
    • @vsync 我认为在这种情况下一个简单的递归将是最佳的,因为我们没有克隆任何东西。
    • 好吧,我在 lodash 的上下文中问过这个问题,而不是在实现递归函数的情况下,不管它多么容易(确实如此)?
    猜你喜欢
    • 1970-01-01
    • 2014-12-10
    • 2018-09-03
    • 2021-04-02
    • 1970-01-01
    • 2018-06-27
    • 2017-01-21
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多