计算嵌套数组中的相同数据不起作用

Count the same data in nested array not working

我正在尝试计算一组用户中具有特定 ID 的用户出现的次数。 用户数组作为键“数据”的值存储在字典中 代码输出 1 而不是预期的 5。 代码:

    var dlsapi = {
        url: 'https://api.discordlist.space/v2/bots/814580247973986314/upvotes',
        headers: {'content-type': 'application/json', authorization: process.env.DLS}
    };
    const discordlistspace = await axios.request(dlsapi);
    try {
    let dlscount = 0;
    discordlistspace.forEach(item => {
        if (item.data[0].user.id === "221838936866029568") {
            dlscount++;
        }
    });
    console.log(dlscount); 
    }
    catch (error) {
        console.error(error);
    }   

这是代码中 API 请求的 JSON(数组)输出(api 请求工作正常):

{
    "page": 1,
    "count": 5,
    "countPerPage": 16,
    "pageCount": 1,
    "sortBy": "timestamp",
    "sortDirection": "descending",
    "data": [{
        "user": {
            "username": "Mashwishi",
            "discriminator": "0001",
            "avatar": "a_42fd57bfe236a51d71dfde5e113143bb",
            "shortDescription": "",
            "banned": null,
            "admin": false,
            "donator": false,
            "createdAt": 1625175650578,
            "updatedAt": 1628435735580,
            "id": "221838936866029568"
        },
        "timestamp": 1628505406447,
        "id": "aef767acc68303735326b2b99a0750c704d5e64a206282bd37b94a9682aa3027"
    }, {
        "user": {
            "username": "Mashwishi",
            "discriminator": "0001",
            "avatar": "a_42fd57bfe236a51d71dfde5e113143bb",
            "shortDescription": "",
            "banned": null,
            "admin": false,
            "donator": false,
            "createdAt": 1625175650578,
            "updatedAt": 1628435735580,
            "id": "221838936866029568"
        },
        "timestamp": 1628393803968,
        "id": "3a96b21c7469db31eeb86d2371cb0d63fc5404e79afb09a738224ebcaf8aaba4"
    }, {
        "user": {
            "username": "Mashwishi",
            "discriminator": "0001",
            "avatar": "a_42fd57bfe236a51d71dfde5e113143bb",
            "shortDescription": "",
            "banned": null,
            "admin": false,
            "donator": false,
            "createdAt": 1625175650578,
            "updatedAt": 1628435735580,
            "id": "221838936866029568"
        },
        "timestamp": 1628176604500,
        "id": "36721763e54280554765bcd614a1e32945ff6f269fb3df3c7e3f8a4be921bcf8"
    }, {
        "user": {
            "username": "Mashwishi",
            "discriminator": "0001",
            "avatar": "a_42fd57bfe236a51d71dfde5e113143bb",
            "shortDescription": "",
            "banned": null,
            "admin": false,
            "donator": false,
            "createdAt": 1625175650578,
            "updatedAt": 1628435735580,
            "id": "221838936866029568"
        },
        "timestamp": 1628096627173,
        "id": "e4a7112bd50b4e1f097e792ae29a1b28ca516a11e4a0c041a88015401ac6a439"
    }, {
        "user": {
            "username": "Mashwishi",
            "discriminator": "0001",
            "avatar": "a_42fd57bfe236a51d71dfde5e113143bb",
            "shortDescription": "",
            "banned": null,
            "admin": false,
            "donator": false,
            "createdAt": 1625175650578,
            "updatedAt": 1628435735580,
            "id": "221838936866029568"
        },
        "timestamp": 1628018492326,
        "id": "160ba20531ca87e43730fa3a671914bd08b0c6c5486a8604f6401279d88803b8"
    }]
}

我认为你在错误的对象上循环。您想检查数据列表中每个用户的 ID。 也许尝试这样的事情

    var dlsapi = {
        url: 'https://api.discordlist.space/v2/bots/814580247973986314/upvotes',
        headers: {'content-type': 'application/json', authorization: process.env.DLS}
    };
    try {
        let dlscount = 0;
        discordlistspace.data.data.forEach(item => {
            if (item.user.id === "221838936866029568") {
                dlscount++;
            }
        });
        console.log(dlscount); 
    } catch (error) {
        console.error(error);
    }  

编辑:如果你想要更短的代码,你可以像这样替换整个 try 块:

    var dlsapi = {
        url: 'https://api.discordlist.space/v2/bots/814580247973986314/upvotes',
        headers: {'content-type': 'application/json', authorization: process.env.DLS}
    };
    try {
        let dlscount = discordListspace.data.data.filter(item => item.user.id == "221838936866029568").length;
        console.log(dlscount); 
    } catch (error) {
        console.error(error);
    }  

filter是一种数组过滤方法(顾名思义)数组:只保留满足特定条件的元素 因此您可以过滤数组以仅包含具有 id 的用户,然后检查结果 length

请试试这个。

JsonObj.data.forEach(item => {
if (item.user.id === '221838936866029568') dlscount++;});

产量 5