在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);
}
  };

工作起来很有魅力!谢谢你的帮助:)