2017-09-15 74 views
0

我最初返回对象的数组,没有密钥这样每个对象的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不是一个函数'

我不明白什么改变了数据,doesnt redux为每个对象分配一个数字键,如果一个没有设置反正呢?

+2

这不是一个数组anymo回覆。但是您可以使用[Object.entries](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries)或[Object.keys](https:// developer .mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) –

+0

我想你想看看[normalizr](https://github.com/paularmstrong/normalizr) – Okazari

回答

1

map是指具有阵列只在这里描述https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

但是上班,你可以使用lodashmap方法,也适用于标准化的对象跟你的一样。

举个例子,你可以使用:

const newArray = _.map(data, (item, key) => { 
    // key is the item's id 
    return item 
}) 

如果使用第三方模块是不是一种选择,你可以用Object.keys工作,并得到了同样的结果:

const newArray = Object.keys(data).map(key => data[key]) 
0

对于存储此数据与id作为每个嵌套对象的关键,可以使用reduce:

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