gpt4 book ai didi

javascript - 按值访问嵌套的 JSON 数组

转载 作者:行者123 更新时间:2023-12-04 01:54:19 25 4
gpt4 key购买 nike

我是 JavaScript 的新手,我真的迷失在这里。这是由 PHP json_encode() 生成的一些数据(并且仅限于最相关的键):

[
{
"product_option_id":"229",
"product_option_value":
[
{
"product_option_value_id":"21",
"option_value_id":"51",
"price":"1,22 €",
"price_prefix":"+"
},
{
"product_option_value_id":"22",
"option_value_id":"52",
"price":false,
"price_prefix":"+"
},
{
"product_option_value_id":"23",
"option_value_id":"53",
"price":"2,42 €",
"price_prefix":"+"
}
],
"option_id":"14",
"type":"radio",
"value":""
},
{
"product_option_id":"228",
"product_option_value":
[
{
"product_option_value_id":"19",
"option_value_id":"49",
"price":"1,22 €",
"price_prefix":"+"
},
{
"product_option_value_id":"20",
"option_value_id":"50",
"price":"2,42 €",
"price_prefix":"+"
}
],
"option_id":"13",
"type":"select",
"value":""
}
]

我需要访问 priceprice_prefix知道 product_option_id 的值(在 JavaScript 中)和 product_option_value_id .

我该怎么做?我应该去循环吗?

更新:

感谢您的回复。除非我遗漏了什么,否则看来 in my case数组(尽管它们可能很丑……)是 much more efficient比所有建议的解决方案都多(我将尝试另一种方法,使用 PHP 格式化符合我需求的 JSON 对象,而不是使用“默认”对象,但这里不在主题之列)。虽然我不喜欢添加库,而且它比大多数其他解决方案都要慢一些,但我会接受 Matt 的解决方案,因为就 JSON 访问而言,它似乎确实让生活变得更轻松。但应该指出的是,Yeldard 和 Barmar 的(几乎是克隆的)解决方案比其他命题更快。

最佳答案

lodash会让这更容易和整洁。它提供了_.find_.filter取决于您的 ID 是否唯一。

var record = _.find( data_structure, {
"product_option_id": "229"
})
if ( !record ) throw new Error("Record not found");

var value = _.find( record.product_option_value, {
"product_option_value_id":"22"
})
if ( !value ) throw new Error("Value not found");

console.log( "price[%s] prefix[%s]", value.price, value.price_prefix )

Demo

对于更复杂的数据选择,您可能需要查看 sift.js .它基于 mongodb's query system .

var records = sift({ 
"product_option_id": "229",
"product_option_value": {
$elemMatch: {
"product_option_value_id": "22"
}
}
},
data_structure
)

关于javascript - 按值访问嵌套的 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31961490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com