我试图用 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
}
}
key和map的查找方法。
const {posts} = this.props
return _.find(posts, { 'deleted': false })_.map(posts, post => {
return (
<div key={post.id}>
最佳答案
基本上可以申请lodash#reduce直接到 Object 而不是先获取所有的键,然后再迭代。使用 reduce
,您可以同时进行映射和过滤。
_.reduce(obj, (i, v, k)=> !v.deleted && !(i[k] = v) || i, {});
让我们为您创建一个工作示例,这是一个代码片段:
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);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
编辑
对于特定情况(OP),只需要删除一些键/值对并构造一个新对象,然后最好使用 lodash#omitBy在某些情况下简单地从对象中删除一些条目。这是此特定用途的一个简单示例。
_.omitBy(obj, o=>o.deleted);
下面是这个例子的代码片段:
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);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
但是,如果两者之间需要任何转换(数组或对象),或者需要自定义输出类型,那么我仍然更愿意建议使用 reduce。
关于javascript - Lodash:过滤然后映射到一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46228559/