当我尝试添加卡片时(我的意思是在地图中添加元素到空数组/对象)
无法将元素(卡)添加到空车道。
当车道为空时,无法匹配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
的外观......
答案 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)
})
结果数组不会插入元素,但原始意志不会被删除。