无法在地图中向对象添加元素

时间:2018-02-08 13:46:45

标签: javascript reactjs

当我尝试添加卡片时(我的意思是在地图中添加元素到空数组/对象) 无法将元素(卡)添加到空车道。 当车道为空时,无法匹配lane.key

这是我的代码:

D_key:卡应移动的车道钥匙。

c_lane_key:当前的车道钥匙。

c_cardKey:当前卡片密钥

moveCard(D_key, c_lane_key, c_cardKey) {

    let data = this.state.lanesData || [];
    let temp = {};
    const objLoop = data
        .map((lane, n) => {
            Object.keys(lane.cards || [])
                .map((_key) => {
                    if (_key === c_cardKey) {
                        temp = lane.cards[_key];
                        const _data1 = [...this.state.lanesData.map(lane => ({
                            cards: ((Object.keys(lane.cards || [])
                                    .map(_cards => {
                                        let temp_array = lane['cards'][_cards];
                                                                                    if (D_key === lane.key && temp !== "") { 
                                            lane.cards[c_cardKey] = temp; // to add card to cards{} in lane[]
                                            temp = "";
                                        temp_array['key_id'] = _cards;
                                        return temp_array;
                                    }))
                                .reduce((obj, card) => {
                                    obj[card.key_id] = { description: card.description, title: card.title }
                                    return obj;
                                }, {})
                            ),
                            id: lane.id,
                            key: lane.key,
                            label: lane.label,
                            title: lane.title
                        }))];

                        let _data2 = [...this.state.lanesData.map(lane => ({
                            cards: (Object.keys(lane.cards || [])
                                    .map(key => {
                                        let temp_array = lane.cards[key];
                                        temp_array['key_id'] = key;
                                        return temp_array;
                                    })
                                    .filter(card => D_key === lane.key || card.key_id !== c_cardKey)
                                )
                                .reduce((obj, card) => {
                                    obj[card.key_id] = { description: card.description, title: card.title }
                                    return obj;
                                }, {}),
                            id: lane.id,
                            key: lane.key,
                            label: lane.label,
                            title: lane.title
                        }))]

                        this.setState({ lanesData: _data1 },
                            () => {
                                this.setState({ lanesData: _data2 });
                            });
                    }
                })
        });}

这是 this.state.lanesData 的外观......

this is data in format

1 个答案:

答案 0 :(得分:0)

如果您发布原始代码而不是已发布的代码,那么

会很好。在任何情况下。你不能在地图中添加元素。 Map是元素操作的转换,意味着您可以转换数组的每个元素,但不能转换整个集合。如果您需要这样做,您应该使用reduce。这将允许您同时转换元素和集合。

  collection.reduce(function(newCollection, element, index){
    // do your thing here
    return newCollection

  }, [])

如果您尝试

  collection.map(function(element, index, sameCollection)
  {
    // do your thing here
    collection.push('anything');
    // or
    sameCollection.push('anything)
  })

结果数组不会插入元素,但原始意志不会被删除。