Совершенно новый для JQuery и проблемы с поиском по объекту JSON и возвращением определенного результата. Это объект, который у меня есть:
"serviceProviderLocationList": [
{
"serviceProvider": {
"value": "NBN"
},
"locationList": [
{
"sourceSystemAddressId": null,
"serviceProvider": "NBN",
"locationId": "LOC000158748472",
"address": {
"subAddressNumber": "121",
},
}
]
},
{
"serviceProvider": {
"value": "Telstra"
},
"locationList": [
{
"sourceSystemAddressId": null,
"locationId": "266292692",
"address": {
"subAddressNumber": null,
},
},
},
{
"sourceSystemAddressId": null,
"locationId": "427275955",
"address": {
"subAddressNumber": "LIFT",
},
},
{
"sourceSystemAddressId": null,
"locationId": "267743661",
"address": {
"subAddressNumber": "100",
},
},
{
"sourceSystemAddressId": null,
"locationId": "267743660",
"address": {
"subAddressNumber": "99",
},
},
}
]
},
{
"serviceProvider": {
"value": "AAPT"
},
"locationList": []
}
]
}
Я пытаюсь найти ту часть объекта, где:
serviceProviderLocationList.ServiceProvider.value == 'Telstra'
Затем выполните поиск в соответствующем LocationList, и если:
this.complexAddress.unit == locationList.address.subAddressNumber
Верните правильный идентификатор местоположения.
Например, если this.complexAddress.unit == '100', он должен вернуть идентификатор местоположения == 267743661.
Или this.complexAddress.unit == 'null', тогда он вернет идентификатор местоположения == 266292692
Это код, который я использую сейчас, чтобы получить объект JSON:
GetTelstraServiceID: функция getTelstraServiceID (событие) { event.preventDefault ();
var data = {
'address': this.complexAddress,
'action': 'get_location_id'
},
$.ajax({
method: "POST",
url: site_vars.ajaxurl,
data: data
})
.done(function( response ) {
var data = $.parseJSON( response ),
locationID = data.serviceProviderLocationList[1].locationList[0].locationId;
if ( typeof locationID !== 'undefined' ) {
that.locationID = locationID;
} else {
alert('We couldn\'t find this address, sorry');
}
});
}
}
Любая помощь будет принята с благодарностью.
Кроме того, ваш JSON недействителен.
Есть ответ на ваш вопрос? Если да, то почему вы еще не выбрали ответ? Если нет, то почему вы не прокомментировали это соответствующим образом?
Используйте Array.prototype.filter()
, чтобы найти поставщика и идентификатор местоположения, который вы ищете.
function getLocationId(data, provider, unit) {
return data.filter(d => d.serviceProvider.value===provider)[0].locationList.filter(d => d.address.subAddressNumber === unit)[0].locationId;
}
const data = JSON.parse(`[{
"serviceProvider": {
"value": "NBN"
},
"locationList": [{
"sourceSystemAddressId": null,
"serviceProvider": "NBN",
"locationId": "LOC000158748472",
"address": {
"subAddressNumber": "121"
}
}]
},
{
"serviceProvider": {
"value": "Telstra"
},
"locationList": [{
"sourceSystemAddressId": null,
"locationId": "266292692",
"address": {
"subAddressNumber": null
}
},
{
"sourceSystemAddressId": null,
"locationId": "427275955",
"address": {
"subAddressNumber": "LIFT"
}
},
{
"sourceSystemAddressId": null,
"locationId": "267743661",
"address": {
"subAddressNumber": "100"
}
},
{
"sourceSystemAddressId": null,
"locationId": "267743660",
"address": {
"subAddressNumber": "99"
}
}
]
},
{
"serviceProvider": {
"value": "AAPT"
},
"locationList": []
}
]`)
console.info(getLocationId(data, 'Telstra', null))
console.info(getLocationId(data, 'Telstra', '100'))
Остальная часть вашего примера кода является неполной, поэтому я не смог полностью ответить на ваш вопрос в своем коде.
Спасибо за коннексо! Я поиграю и посмотрю, что у меня получится.
Я добавил остальные ваши требования. Он в основном использует Array.prototype.filter()
дважды.
Не существует такой вещи, как Объект JSON. Если это JSON, это
string
. Если этоobject
, это Javascript.