如何用lodash改进我过滤的对象循环?

时间:2017-10-27 21:57:47

标签: javascript ecmascript-6 lodash

我在条件过滤的数据中循环[['0,3,2,1,0'], ['0,1,2,3,0'], ['0,1,3,2,0'], ['1,0,2,3,0'], ['3,0,0,2,1'], ['1,0,2,3,0'], ['1,3,0,2,0'], ['0,0,1,0,0'], ['0,2,1,0,0'], ['3,1,0,2,0'], ['3,2,0,0,1'], ['2,0,0,3,1'], ['0,2,0,1,2'], ['2,0,3,0,1'], ['0,3,0,1,2'], ['2,3,1,0,0']]



issues




我想知道Lodash是否有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

我会做这样的事情,实际上我才知道。

const filter = _.pickBy(data, (list) => {
 return //whatever you want 
  });

答案 1 :(得分:0)

查看您的代码,从我可以收集的内容中,您将数据作为对象字面值,然后使用_destroy标记标记您不想要的密钥。

然后你想要另一个没有标记为_destroy的对象文字。

下面是没有lodash的版本。 在lodash中可能有一种更简单的方法,不确定。但是对我来说ES6的方式看起来很自然,很容易理解。甚至可以通过将比特分成实用函数来使其看起来更简单,例如。如果你想要键/值,可以在其他地方使用最后一个reduce,转换回对象文字。

PS。如果您不介意修改原始对象文字,这更容易,而且很可能是更好的性能。像React这样的东西我相信像确定性数据一样,因此就地删除可能不是一个选择。



const data = {
  a: {
    _destroy: true,
    value: "destroy this"
  },
  b: {
    value: "Keep Me!!"
  }
};

const data2 = 
  Object.entries(data).
  filter(([key, value]) => !value._destroy).
  reduce((obj, [key, value]) => (obj[key] = value) && obj, {});

console.log(data2);