簡體   English   中英

JSON - 返回列表中具有特定鍵值的項目數

[英]JSON - return number of items within a list that have a specific key value

試圖解決這個 JSON 問題有點像噩夢。 我需要將報價的數量存儲為一個計數,但它只需要是一個報價具有激活狀態的數字。 在下面的示例中(為了說明進行了簡化),結果應該是 2(因為只有它們中的“激活”鍵是假的)。 我試圖以此為目標:

var count = Object.keys(object.allOffers[0].offers[0].activated.hasOwnProperty('true')).length;

^^^ 但它返回 0。此外,它只選擇第一個報價,我需要一個方法來定位位於 allOffers 中的所有報價。 有任何想法嗎? 下面的示例代碼。

object {
  "allOffers": [
    {
      "offers": [
        {
          "offerId": 15661,
          "activated": true,
          "viewed": false
        },
        {
          "offerId": 15641,
          "activated": false,
          "viewed": false
        },
        {
          "offerId": 16461,
          "activated": true,
          "viewed": true
        }
      ]
    }
  ]
}

您的.offers[0]僅針對數組中的第一個元素,並且檢查.activated字符串是否具有自己的'true'屬性沒有任何意義。

最好的方法是使用.reduce代替 - 遍歷數組,並為obj.activated為真的每個對象向累加器添加一個。

 const input = { "allOffers": [ { "offers": [ { "offerId": 15661, "activated": true, "viewed": false }, { "offerId": 15641, "activated": false, "viewed": false }, { "offerId": 16461, "activated": true, "viewed": true } ] } ] }; const totalActivated = input.allOffers[0].offers .reduce((a, obj) => a + obj.activated, 0); console.log(totalActivated);

按那些被激活的過濾然后檢查結果數組的長度也有效。

 const input = { "allOffers": [ { "offers": [ { "offerId": 15661, "activated": true, "viewed": false }, { "offerId": 15641, "activated": false, "viewed": false }, { "offerId": 16461, "activated": true, "viewed": true } ] } ] }; const totalActivated = input.allOffers[0].offers .filter(obj => obj.activated) .length; console.log(totalActivated);

暫無
暫無

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

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