我需要在对象中转换此数组吗?

时间:2017-09-29 18:28:22

标签: javascript arrays reactjs react-native ecmascript-6

我的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。如果是,我如何在Object中转换整个结果,如下所示:

结果:

{
    {
        "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"
            ]
        }
    }
}

我这样做的原因是针对reducer调度操作的目标:

  switch (action.type) {
    case "INC_NUM":
         const newState = {...state};
         newState[action.payload].nubmer++;
         return newState;

1 个答案:

答案 0 :(得分:0)

听起来你只是希望能够快速找到具有给定id值的对象。我建议您不要“转换”您的数据,而是制作一张地图,以便按ID查找任何对象。

let data = [
    {
        "id": 1,
        "title": "Name 01",
        "tags": [
            "TAG1",
            "TAG4",
            "TAG2"
        ]
    },
    {
        "id": 2,
        "title": "Name 02",
        "tags": [
            "TAG4",
            "TAG3"
        ]
    },
    {
        "id": 3,
        "title": "Name 03",
        "tags": [
            "TAG1"
        ]
    }
];

// create a map with id as the key, object as the value
let map = new Map();
data.forEach(obj => {
   map.set(obj.id, obj);
});

// look up a given id
console.log(map.get(3));