JSON - return 列表中具有特定键值的项目数
JSON - return number of items within a list that have a specific key value
试图解决这个 JSON 问题有点像噩梦。我需要将报价的数量存储为计数,但它只需要是报价具有激活状态的数字。在下面的示例中(为便于说明而简化),结果应为 2(因为对于 'activated' 键,只有其中一个为假)。我试图以此为目标:
var count = Object.keys(object.allOffers[0].offers[0].activated.hasOwnProperty('true')).length;
^^^ 但它 returns 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
字符串是否有自己的 属性 of '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);
试图解决这个 JSON 问题有点像噩梦。我需要将报价的数量存储为计数,但它只需要是报价具有激活状态的数字。在下面的示例中(为便于说明而简化),结果应为 2(因为对于 'activated' 键,只有其中一个为假)。我试图以此为目标:
var count = Object.keys(object.allOffers[0].offers[0].activated.hasOwnProperty('true')).length;
^^^ 但它 returns 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
字符串是否有自己的 属性 of '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);