簡體   English   中英

Javascript ForEach 在 Arrays 的數組上

[英]Javascript ForEach on Array of Arrays

我正在循環瀏覽一組博客文章,首先將博客作者的用戶名和 ID 推送到一個新的 arrays 數組,然后計算每個作者的博客數量。 下面的代碼實現了這一點; 但是,在新數組中,用戶名和作者 ID 不再是數組中單獨的項目,而是似乎連接成一個字符串。 我需要將它們作為單獨的項目保留,因為我需要單獨使用它們; 我該如何修改結果以實現這一目標?

    var countAuthors = [];
    blogAuthors = await Blog.find().populate('authors');
    blogAuthors.forEach(function(blogAuthor){
        countAuthors.push([blogAuthor.author.username, blogAuthor.author.id]);
        
    })
    console.log(countAuthors);
    // Outputs as separate array items, as expected:
    //   [ 'author1', 5d7eed028c298b424b3fb5f1 ],
    //   [ 'author2', 5dd8aa254d74b30017dbfdd3 ],
    var result = {};
    countAuthors.forEach(function(x) {
        result[x] = (result[x] || 0) + 1;
    });

    console.log(result);
    //  Username and author ID become a single string and cannot be accessed as separate array items
    //  'author1,5d7eed028c298b424b3fb5f1': 15,
    //  'author2,5dd8aa254d74b30017dbfdd3': 2,

更新:

也許我可以進一步解釋為什么要這樣做。 我的目標是一個表格,其中顯示博客作者的姓名以及他們撰寫的博客數量。 但是,我還希望作者姓名鏈接到他們的個人資料頁面,這需要 blogAuthor.author.id 這樣做。 因此,在執行計數后,我仍然需要能夠分別訪問作者用戶名和 ID。 謝謝

您的問題是您沒有在 foreach 回調中拆分x ,因此整個數組被轉換為字符串並在插入結果 object 時用作鍵。

您可以使用數組解構來拆分作者姓名和博客 ID,並使用它們選擇性地向結果 object 添加新條目,然后更新該結果。

 countAuthors = [ ['author1', 'bookId1'], ['author2', 'bookId2'], ['author1', 'bookId3'], ['author1', 'bookId4'], ['author2', 'bookId5'] ] var result = {}; countAuthors.forEach(([author, id]) => { if (result[author] === undefined) { result[author] = {count: 0, blogIds: []}; } result[author].count += 1; result[author].blogIds.push(id); }); console.log(result);

您可以使用 String.split()。 例如:

let result = 'author1,5d7eed028c298b424b3fb5f1'.split(',')

將結果設置為:

['author1' , '5d7eed028c298b424b3fb5f1']

然后,您可以單獨訪問它們,例如:

result[1] //'5d7eed028c298b424b3fb5f1'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM