【问题标题】:trying to remove nested object using lodash尝试使用 lodash 删除嵌套对象
【发布时间】:2020-04-11 20:06:55
【问题描述】:

我不确定我做错了什么,但我无法取消设置。我试图从 redux 中的对象中删除一个项目。尝试使用删除,但它破坏了应用程序。我从 lodash 得到了一个真实的回应,它已被删除,但是当我在它显示相同的对象后进行控制台时。

let newState = {...state};
console.log('before', newState);
console.log(_.unset(newState, [`year2020.month${action.month}.days.day${action.day}`]));
console.log('after',newState);
return newState;

样本状态:

let state = {
  year2020: {
    month3: {
      num: 0,
      name: "January",
      length: 31,
      starts: 3,
      days: {
        day1: { mood: 1 },
        day2: { mood: 2 },
        day3: { mood: 3 },
        day11: { mood: 4 }
      }
    }
  }
};

【问题讨论】:

    标签: object redux lodash


    【解决方案1】:

    由于您的路径是一个字符串(一个由点分隔的字符串),因此不要包含在数组中。

    注意:使用_.cloneDeep() 而不是浅克隆(传播),因为你会改变对象的更深层次:

    const state = {"year2020":{"month3":{"num":0,"name":"January","length":31,"starts":3,"days":{"day1":{"mood":1},"day2":{"mood":2},"day3":{"mood":3},"day11":{"mood":4}}}}};
    
    const newState = _.cloneDeep(state);
    const action = { payload: { month: 3, day: 1 }};
    _.unset(newState, `year2020.month${action.payload.month}.days.day${action.payload.day}`);
    console.log('after',newState);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

    Lodash/fp 与 redux 配合得很好,因为它不会改变原始对象(在这个例子中,路径是数组):

    const state = {"year2020":{"month3":{"num":0,"name":"January","length":31,"starts":3,"days":{"day1":{"mood":1},"day2":{"mood":2},"day3":{"mood":3},"day11":{"mood":4}}}}};
    
    const action = { payload: { month: 3, day: 1 }};
    
    const newState = _.unset([
      'year2020',
      `month${action.payload.month}`,
      'days',
      `day${action.payload.day}`
    ], state);
    
    console.log('after',newState);
    <script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>

    【讨论】:

    • 不客气,我很高兴你学到了一些东西 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 2017-10-19
    • 2016-01-03
    • 2018-02-25
    相关资源
    最近更新 更多