Saya mencoba membaca tag dari kumpulan data bibliografi terpilih di ZOTERO dengan Javascript.

Bagi mereka yang tidak terbiasa dengan ZOTERO: ia memiliki panel "jalankan JS" bawaan untuk bekerja secara langsung dengan item yang dipilih / ditandai dalam versi mandiri.

Ini adalah skrip yang saya gunakan untuk membaca data dari folder yang dipilih dan mengakses tag:

var s = new Zotero.Search();
s.libraryID = ZoteroPane.getSelectedLibraryID();

var itemIDs = await s.search();

for (itemID of itemIDs) {
       item = Zotero.Items.get(itemID);
       return item;
       itemTAG = item.getTags();
       return itemTAG;
    }

Ketika saya memanggil return itemIDs; sebelum loop for, saya mendapatkan 4943 key:value pasangan, yang mencerminkan jumlah item dalam koleksi saya dengan benar.

Strukturnya terlihat seperti ini:

[
    "0": 21848
    "1": 21849
    "2": 21850
    "3": 21851
    "4": 21852
    "5": 21853
    "6": 21854
    "7": 21855
    "8": 21856
    "9": 21857
    "10": 21858
]

Apa yang sebenarnya ingin saya lakukan adalah mengulangi semua ID untuk mendapatkan data bibliografi untuk setiap item dan mengembalikan tag.

Inilah mengapa saya pertama kali mencoba for/in loop, tetapi ini tidak berhasil, diduga karena saya tidak memanggil pasangan key:value (sesuai dengan kamus dengan Python?) dengan benar .

Namun, loop untuk/dari di atas berfungsi setidaknya untuk item pertama (item "0") dan mengembalikan data berikut:

{
    "key": "BDSIJ5P4",
    "version": 1085,
    "itemType": "book",
    "place": "[Augsburg]",
    "publisher": "[Gabriel Bodenehr]",
    "date": "[circa 1730]",
    "title": "Constantinopel",
    "numPages": "1 Karte",
    "creators": [
        {
            "firstName": "Gabriel",
            "lastName": "Bodenehr",
            "creatorType": "author"
        }
    ],
    "tags": [
        {
            "tag": "Europa"
        }
    ],
    "collections": [
        "DUW2PJDP"
    ],
    "relations": {
        "dc:replaces": [
            "http://zotero.org/groups/2289797/items/ZB5J5VZK"
        ]
    },
    "dateAdded": "2019-02-13T17:27:29Z",
    "dateModified": "2020-03-23T13:13:13Z"
}

Jadi dua pertanyaan saya adalah:

  1. Bagaimana saya bisa membuat loop for/in yang tepat yang mengambil data yang sama ini untuk setiap item?
  2. Bagaimana cara mengembalikan tag saja? Tampaknya item.getTags() [yang saya gunakan dalam analogi dengan contoh getNotes() dalam dokumentasi] mungkin bukan fungsi yang valid. Apakah itu khusus untuk Zotero atau Javascript secara umum?
1
OnceUponATime 12 Mei 2021, 19:02

1 menjawab

Jawaban Terbaik

Gunakan map() untuk memanggil fungsi pada setiap elemen array dan mengembalikan array dari semua hasil.

return itemIDs.map(itemID => Zotero.Items.get(itemID).getTags())
2
Barmar 12 Mei 2021, 16:06