Lodash:过滤然后映射对象

Pet*_*ren 6 javascript lodash reactjs redux

我试图用 to 过滤掉对象,delete: false然后只映射并将这个对象渲染到屏幕上,但我不知道如何让它工作。

示例对象

{
  "8xf0y6ziyjabvozdd253nd": {
    "id": "8xf0y6ziyjabvozdd253nd",
    "timestamp": 1467166872634,
    "title": "Udacity is the best place to learn React",
    "body": "Everyone says so after all.",
    "author": "thingtwo",
    "category": "react",
    "voteScore": 6,
    "deleted": false
  }
}
Run Code Online (Sandbox Code Playgroud)

查找键和映射的方法。

const {posts} = this.props
        return _.find(posts, { 'deleted': false })_.map(posts, post => {
            return (
                <div key={post.id}>
Run Code Online (Sandbox Code Playgroud)

Kou*_*jee 6

基本上,您可以将lodash#reduce直接应用于Object 而不是先获取所有键,然后再次迭代。并且reduce可以与您一起进行映射和过滤

_.reduce(obj, (i, v, k)=> !v.deleted && !(i[k] = v) || i, {});
Run Code Online (Sandbox Code Playgroud)

让我们为您创建一个工作示例,这是一个代码片段:

_.reduce(obj, (i, v, k)=> !v.deleted && !(i[k] = v) || i, {});
Run Code Online (Sandbox Code Playgroud)
var obj = {
  "9ny0z4ziyjabvozdc713dr": {
    "id": "9ny0z4ziyjabvozdc713dr",
    "timestamp": 1467166879723,
    "title": "StackOverfow is the best place to learn Angular",
    "body": "bla bla bla bla.",
    "author": "myself",
    "category": "angular",
    "voteScore": 9,
    "deleted": true
  },
    "8xf0y6ziyjabvozdd253nd": {
    "id": "8xf0y6ziyjabvozdd253nd",
    "timestamp": 1467166872634,
    "title": "Udacity is the best place to learn React",
    "body": "Everyone says so after all.",
    "author": "thingtwo",
    "category": "react",
    "voteScore": 6,
    "deleted": false
  }
}

var finalObj =_.reduce(obj, (i, v, k)=> !v.deleted && !(i[k] = v) || i, {});

console.log(finalObj);
Run Code Online (Sandbox Code Playgroud)

编辑

对于(OP的)特定情况,只需要删除一些键/值对并构造一个新对象,然后最好使用lodash#omitBy来简单地根据某些条件从对象中删除一些条目。这是这种特殊用途的一个简单示例。

_.omitBy(obj, o=>o.deleted);

这是此示例的代码片段:

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
Run Code Online (Sandbox Code Playgroud)
var obj = {
      "9ny0z4ziyjabvozdc713dr": {
        "id": "9ny0z4ziyjabvozdc713dr",
        "timestamp": 1467166879723,
        "title": "StackOverfow is the best place to learn Angular",
        "body": "bla bla bla bla.",
        "author": "myself",
        "category": "angular",
        "voteScore": 9,
        "deleted": true
      },
        "8xf0y6ziyjabvozdd253nd": {
        "id": "8xf0y6ziyjabvozdd253nd",
        "timestamp": 1467166872634,
        "title": "Udacity is the best place to learn React",
        "body": "Everyone says so after all.",
        "author": "thingtwo",
        "category": "react",
        "voteScore": 6,
        "deleted": false
      }
    }

    var finalObj =_.omitBy(obj, o=>o.deleted);

    console.log(finalObj);
Run Code Online (Sandbox Code Playgroud)

但是,如果在(数组或对象)之间需要任何转换,或者需要自定义输出类型,那么我仍然更愿意建议使用reduce。