【发布时间】:2018-03-11 17:15:56
【问题描述】:
我的data 是一个数组,我将其转换为key:value(不确定这是否是它的名称)类型。
数据:
[
{
"id": 1,
"title": "Name 01",
"tags": [
"TAG1",
"TAG4",
"TAG2"
]
},
{
"id": 2,
"title": "Name 02",
"tags": [
"TAG4",
"TAG3"
]
},
{
"id": 3,
"title": "Name 03",
"tags": [
"TAG1"
]
}
]
我将其转换为:
result = data.map(a => ({ [a.id]: a }));
所以我得到:
结果:
[
{
"1": {
"id": 1,
"title": "Post1 T1 T2 T4",
"tags": [
"TAG1",
"TAG4",
"TAG2"
]
}
},
{
"2": {
"id": 2,
"title": "Post1 T3 T4",
"tags": [
"TAG4",
"TAG3"
]
}
},
{
"3": {
"id": 3,
"title": "Post3 with No Tags",
"tags": [
"TAG1"
]
}
}
]
如何映射结果并显示在 View/Text 中?
我试过了:
Object.keys(results).map((result, idx) => {
return(
<View key={idx}>
<Text>{result.title}</Text>
</View>
)
});
但我收到一个错误:Cannot read property 'map' of undefined.
我是否需要将结果转换为对象,然后才能使用Object.keys。如果是,我如何将整个结果转换为这样的对象:
结果:
{
{
"1": {
"id": 1,
"title": "Post1 T1 T2 T4",
"tags": [
"TAG1",
"TAG4",
"TAG2"
]
}
},
{
"2": {
"id": 2,
"title": "Post1 T3 T4",
"tags": [
"TAG4",
"TAG3"
]
}
},
{
"3": {
"id": 3,
"title": "Post3 with No Tags",
"tags": [
"TAG1"
]
}
}
}
我这样做的原因是针对减速器调度操作的 id:
switch (action.type) {
case "INC_NUM":
const newState = {...state};
newState[action.payload].nubmer++;
return newState;
【问题讨论】:
-
呃,嗯。为什么?你所做的就是用另一个对象包装每个内部对象,这有什么目的?它所做的只是强迫您使用
theArray[0][1].id而不是theArray[0].id来引用对象。它实际上没有任何生产力。 -
这就是你否决我的问题的原因吗?我更新了它。当前的
data/result里面没有number键。但我试图先对此进行排序。如果对象的id未在数组外部定义,您将如何建议将这些对象的数组作为目标? -
它本来就是这样,因为数组是从 0 开始索引的。所以 id1 是 0,id2 是 1,等等。假设你没有任何缺失的 id,这应该线性地继续。但是,您可以将数组转换为遵循类似结构的对象,其中键是 id。
-
这就是我在第一次展示的 Result 中所做的。但我无法用
map展示它。这是这篇文章的最初问题。请帮忙。 -
不,你得到的结果仍然是一个数组。
标签: javascript arrays reactjs react-native ecmascript-6