[英]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.