在javascript/React native中使用新值更新对象数组键
我使用在javascript/React native中使用新值更新对象数组键,javascript,react-native,Javascript,React Native,我使用AsyncStorage存储了以下对象数组: [ { "groupId": 1, "id": 1, "name": "a", }, { "groupId": 2, "id": 2, "name": "ab", }, { "groupId"
AsyncStorage
存储了以下对象数组:
[
{
"groupId": 1,
"id": 1,
"name": "a",
},
{
"groupId": 2,
"id": 2,
"name": "ab",
},
{
"groupId": 3,
"id": 3,
"name": "abc",
},
{
"groupId": 2,
"id": 4,
"name": "abcd",
},
]
我正在检索数据以在平面列表中显示它,但不是显示groupId
,而是显示每个项目的groupName
我有另一个存储了组的密钥:
[
{
"groupName": "g1",
"id": 1,
},
{
"groupName": "g2",
"id": 2,
}
]
我创建了一个函数,根据groupId
检索groupName
。这很好:
const getGroupName = async (groupIdToFind) => {
const existingsGroups = (await AsyncStorage.getItem("groups")) || "[]";
const existingsGroupsParsed = JSON.parse(existingsGroups);
const groupDataFound = existingsGroupsParsed.find(
(results) => results.id.toString().indexOf(groupIdToFind) > -1
);
if (groupDataFound) {
return groupDataFound.groupName;
}
return false;
};
我想修改从我的loadFlatlist
函数中的存储中检索到的数据,但这正是我努力的方向
const loadFlatlist = async (storageKey) => {
try {
let itemsOnStorage = await AsyncStorage.getItem(storageKey);
itemsOnStorage = JSON.parse(itemsOnStorage);
if (itemsOnStorage !== null) {
let finalItemsOnStorage = "";
itemsOnStorage.map(async function (obj) {
console.log(obj.groupId); // Correctly returns 1, 2, 3 ...
let retrievedGroupName = await getGroupName(obj.groupId);
console.log(retrievedGroupName); // Correctly returns g1, g2 ...
finalItemsOnStorage = await update(itemsOnStorage, {
groupId: { $set: retrievedGroupName },
});
});
console.log(finalItemsOnStorage); // Returns same content as itemsOnStorage
setDataOnDevice(itemsOnStorage); // This will be loaded in my flatlist
}
} catch (err) {
alert(err);
}
};
问题在于loadFlatlist
,我没有设法用groupName
替换groupId
finalItemsOnStorage
的内容与itemsOnStorage
的内容相同
你能看出我的功能有什么问题吗?有更好的方法吗?像这样试试
const loadFlatlist = async (storageKey) => {
try {
let itemsOnStorage = await AsyncStorage.getItem(storageKey);
itemsOnStorage = JSON.parse(itemsOnStorage);
const existingsGroups = (await AsyncStorage.getItem("groups")) || "[]";
const existingsGroupsParsed = JSON.parse(existingsGroups);
if (itemsOnStorage !== null) {
let finalItemsOnStorage = [];
itemsOnStorage.forEach(item => {
let index = existingsGroupsParsed.findIndex(obj => obj.id ===
item.groupId)
if(index != -1) {
finalItemsOnStorage.push({...item,
groupId:existingsGroupsParsed[index].groupName})
}
});
console.log(finalItemsOnStorage);
setDataOnDevice(finalItemsOnStorage);
}
} catch (err) {
alert(err);
}
};
工作起来很有魅力!谢谢你的帮助:)