2016-12-08 6 views
1

С помощью this forum Я создаю небольшой скрипт, который проверяет, присутствует ли имя в объекте из ответа json. Если это имя присутствует, я хочу получить значение от этого объекта и показать его где-нибудь в div.Имя теста в объекте

Все работает отлично, однако есть некоторые product.specs с почти одинаковыми именами. В приведенном ниже примере мы имеем:

Height (mm) и Height stacked (mm).

Когда оба вышеуказанных присутствуют в json-ответе, он автоматически захватывает второй Height (так что высота укладывается (мм)).

При использовании приведенного ниже скрипта проверьте имя для reHeight = /height/i;. Как я могу исключить Height stacked (mm) из этого теста, использовать только значение от Height (mm)?

Так что у меня есть это

var data = { 
    "product": { 
    "specs": { 
     "231638": { 
     "id": 231638, 
     "title": "Length (mm)", 
     "value": "1200" 
     }, 
     "231641": { 
     "id": 231641, 
     "title": "Width (mm)", 
     "value": "800" 
     }, 
     "231644": { 
     "id": 231644, 
     "title": "Height (mm)", 
     "value": "144" 
     }, 
    "239999": { 
     "id": 239999, 
     "title": "Height stacked (mm)", 
     "value": "14400" 
     } //etc etc 
    } 
    } 
}; 

var length = 0, width = 0, height = 0, 
    reLength = /length/i, 
    reWidth = /width/i, 
    reHeight = /height/i; 

$.each(data.product.specs, function (specId, spec) { 
    if (reLength.test(spec.title)) 
    length = spec.value; 
    else if (reWidth.test(spec.title)) 
    width = spec.value; 
    else if (reHeight.test(spec.title)) 
    height = spec.value; 
}); 

var html = '<div class="somediv">' + 
    '<span class="width">w: ' + width + '</span>' + 
    '<span class="height">h: ' + height + '</span>' + 
    '<span class="length">l: ' + length + '</span>' + 
    '</div>'; 
$(document.body).html(html); 

ответ

1

Вы можете быть более конкретным с регулярным выражением:

reHeight = /height \(mm\)/i; 

var data = { 
 
    "product": { 
 
    "specs": { 
 
     "231638": { 
 
     "id": 231638, 
 
     "title": "Length (mm)", 
 
     "value": "1200" 
 
     }, 
 
     "231641": { 
 
     "id": 231641, 
 
     "title": "Width (mm)", 
 
     "value": "800" 
 
     }, 
 
     "231644": { 
 
     "id": 231644, 
 
     "title": "Height (mm)", 
 
     "value": "144" 
 
     }, 
 
    "239999": { 
 
     "id": 239999, 
 
     "title": "Height stacked (mm)", 
 
     "value": "14400" 
 
     } //etc etc 
 
    } 
 
    } 
 
}; 
 

 
var length = 0, width = 0, height = 0, 
 
    reLength = /length/i, 
 
    reWidth = /width/i, 
 
    reHeight = /height \(mm\)/i; 
 

 
$.each(data.product.specs, function (specId, spec) { 
 
    if (reLength.test(spec.title)) 
 
    length = spec.value; 
 
    else if (reWidth.test(spec.title)) 
 
    width = spec.value; 
 
    else if (reHeight.test(spec.title)) 
 
    height = spec.value; 
 
}); 
 

 
var html = '<div class="somediv">' + 
 
    '<span class="width">w: ' + width + '</span>' + 
 
    '<span class="height">h: ' + height + '</span>' + 
 
    '<span class="length">l: ' + length + '</span>' + 
 
    '</div>'; 
 
$(document.body).html(html);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Хорошо, что я попытался было ' ба t/(mm /)/i' :(Ваши работы лучше;) Thx ... – Meules

+0

Вы были на правильном пути, вы только что сбросили свои побеги. Счастливое кодирование;) – zer00ne

Смежные вопросы