Я пытался найти ответ здесь, но я не могу найти рабочее решение.
У меня есть функция, которая создает массивы с некоторыми данными о доставке продукта, например:
У меня есть два продукта в корзине, с таким html:
<div class="prod" data-pid="41853029" data-vid="79380299" data-qty="1">....<div>
<div class="prod" data-pid="41853029" data-vid="79380296" data-qty="3">....<div>
Далее я собираю всю информацию из продуктов в корзине, вот так:
$(function(){
$('.prod').each(function(){
var vid = $(this).data('vid')
var url = 'link-to-api/api/stock/'+$(this).data('pid')+'?secret=secret&quantity='+$(this).data('qty')
getAllItems(url, vid)
});
});
Указанные выше данные отправляются в функцию getAllItems
. В этой функции есть вызов JSON API от поставщика. Отсюда я хочу вернуть массив с двумя другими массивами, которые содержат новые данные из API. Что-то вроде этого:
// "main" array
[
// array with product data for product 1
[
{
"id": 79380299,
"dt": 1,
"dtt": "Voor 17:00 uur = morgen in huis",
"co": "17:00",
"sid": 5
}
],
// array with product data for product 2
[
{
"id": 79380296,
"dt": 3,
"dtt": "Voor 15:00 uur besteld, over 3 werkdagen in huis",
"co": "15:00",
"sid": 5
}
]
]
Когда у меня есть этот «основной» массив, я хочу отфильтровать этот массив по значению dt
(что означает время доставки). После фильтрации я хочу отправить отдельный массив с самым высоким значением dt
в новую функцию. Я пробовал что-то вроде кода ниже:
function getAllItems(url, vid){
var matched_variant = []
$.getJSON(url, function(data){
$.each(data.variants, function(i, variant){
if(variant.id == vid){
matched_variant.push({
id: variant.id,
dt: variant.deliveryTimeInDays,
dtt: variant.deliveryTime,
co: variant.cutOffTime,
sid: variant.supplier_id
});
}
});
}).done(function(){
let matched = matched_variant
let highest = {dt: 0};
matched.forEach((arr, arrIndex) => {
arr.forEach(dtObj => {
let dt = parseInt(dtObj.dt)
if (dt > highest.dt) {
highest = dtObj;
}
})
});
let highestDTArray = [highest];
setDeliveryDate(array_with_highest_dt_value)
});
}
Для полноты данных JSON:
{
"id": 41853029,
"variants": {
"79380290": {
"id": 79380290,
"supplier_id": 5,
"on_stock": "no",
"levelLocal": 0,
"levelSupplier": 0,
"deliveryTime": "out of stock",
"cutOffTime": "15:00",
"deliveryTimeInDays": -1
},
"79380293": {
"id": 79380293,
"supplier_id": 5,
"on_stock": "no",
"levelLocal": 0,
"levelSupplier": 0,
"deliveryTime": "out of stock",
"cutOffTime": "15:00",
"deliveryTimeInDays": -1
},
"79380296": {
"id": 79380296,
"supplier_id": 5,
"on_stock": "supplier",
"levelLocal": 1,
"levelSupplier": 250,
"deliveryTime": "Three days",
"cutOffTime": "15:00",
"deliveryTimeInDays": 3
},
"79380299": {
"id": 79380299,
"supplier_id": 5,
"on_stock": "supplier",
"levelLocal": 2,
"levelSupplier": 250,
"deliveryTime": "One day",
"cutOffTime": "15:00",
"deliveryTimeInDays": 1
}
}
}
Два вопроса:
1) С помощью приведенного выше кода я изо всех сил пытаюсь создать массив main
с двумя другими массивами в нем. Как создать один массив с массивами данных о продукте?
2) Как сравнить это dt
значение и вернуть его, чтобы его можно было отправить в функцию setDeliveryDate(array_with_highest_dt_value)
?
Любая помощь с благодарностью!