如何使用 map 函数,以便将索引作为 属性 添加到新构造的对象中?

How do I use map function, so I can add the index as a property to the newly constructed object?

我有一个索引数组:例如selected = [2, 6, 10] ()。我还有一组名为 photos 的照片对象。我只想跟踪选定的照片,所以我这样做:

const selectedPhotos = selectedArray.map((i) => photos[i]); 

这给了我结果:

Array [
  Object {
    "albumId": "someId1",
    "creationTime": "sometime",
    "duration": 0,
    "filename": "name1.jpg",
    "id": "someId1",
    "uri": "someIUri1",
  },
  Object {
    "albumId": "someId2",
    "creationTime": "sometime",
    "duration": 0,
    "filename": "name2.jpg",
    "id": "id2",
    "uri": "uri2",
  },
  Object {
    "albumId": "someId3",
    "creationTime": "sometime",
    "filename": "filename3.jpg",
    "uri": "uri3",
  },
 ]

这很好,但是我还想跟踪所选索引。所以我的问题是,我应该如何在 photo 属性旁边添加类似以下信息的内容:index: 2index: 6 等。所以我想 return 像这样:

Array [
      Object {
        "index": 2,
        "albumId": "someId1",
        "creationTime": "sometime",
        "duration": 0,
        "filename": "name1.jpg",
        "id": "someId1",
        "uri": "someIUri1",
      },
      Object {
        "index": 6
        "albumId": "someId2",
        "creationTime": "sometime",
        "duration": 0,
        "filename": "name2.jpg",
        "id": "id2",
        "uri": "uri2",
      },
      Object {
        "index": 10
        "albumId": "someId3",
        "creationTime": "sometime",
        "filename": "filename3.jpg",
        "uri": "uri3",
      },
     ]

只需添加索引:

const selectedPhotos = selectedArray.map((i) => {
  let photo = photos[i];
  photo.index = i;
  return photo;
}); 

你可以这样做

const selectedPhotos = selectedArray.map((i) => {
 let curItem={...photos[i]};
 curItem.index=i;
  return curItem;
}); 

您可以创建一个新对象并在其中解构您想要的对象,然后添加索引。这样你就可以在一行中完成并且很容易阅读。

const selectedPhotos = selectedArray.map(i => ({ ...photos[i], index: i })); 

更安全的版本 optional chaning:

const selectedPhotos = selectedArray.map(i => ({ ...photos?.[i], index: i }));