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)
基本上,您可以将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。