带有键和映射的React / Redux数组

时间:2017-09-15 12:23:35

标签: arrays json reactjs redux

我有一个API,它最初返回一个对象数组,每个对象没有键,如下所示:

[
{
"id": 4311,
"title": "C43- Miami Bow Cabinet Handles High Quality Stainless Steel (Polished) Handles",
"liked": false
},
{
"id": 2235,
"title": "C43- Miami Bow Cabinet Handles High Quality Stainless Steel (Brushed) Handles",
"liked": false
}
]

然而,如果我可以使用id作为每个嵌套对象的键存储这些数据,它会对我的应用程序有很大帮助,我已经更新了我的API以返回这样的数据:

{
"2235": {
"title": "C43- Miami Bow Cabinet Handles High Quality Stainless Steel (Brushed) Handles",
"liked": false
},
"4311": {
"title": "C43- Miami Bow Cabinet Handles High Quality Stainless Steel (Polished) Handles",
"liked": false
}
}

然而现在我从反应中得到一个错误 - 'props.posts.map不是函数'

我无法理解数据的变化,如果没有设置,还是还没有为每个对象分配一个数字键吗?

2 个答案:

答案 0 :(得分:1)

map仅适用于此处https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

所述的数组

但是,您可以使用lodash的{​​{1}}方法,该方法也适用于与您标准化对象相同的标准化对象。

例如,您可以使用:

map

如果不能使用第三方模块,您可以使用const newArray = _.map(data, (item, key) => { // key is the item's id return item }) 并获得相同的结果:

Object.keys

答案 1 :(得分:1)

要存储此数据,并将id作为每个嵌套对象的键,可以使用reduce:

arr.reduce(function(map, obj){
  map[obj.id] = {
    title: obj.title,
    liked: obj.liked
}
 return map
}, {})