Скажем, у меня есть следующий объект;

var set = [
    {"desc":"Standard","code":"C1S"},
    {"desc":"Superior","code":"B2T"},
    {"desc":"Standard","code":"A1K"}
];

Затем у меня есть модель DOM, которая выводит значение «desc» для выбранного объекта на странице, например:

document.querySelector('.ResRoom .infoIcoAfter').innerHTML;

Вышеупомянутый document.querySelector возвращает либо "Standard", "Superior", либо "Deluxe".

Я хочу создать переменную в JS, которая будет возвращать значение vvalue "кода" для сделанного выбора. Например, если указанный выше document.querySelector возвращает «Standard», мне нужно, чтобы эта новая переменная имела значение = «C1S».

Может кто поможет? Заранее большое спасибо. A.

0
Alessandro Crotti 19 Сен 2018 в 17:36

2 ответа

Лучший ответ

Альтернативой является использование функции find.

Предполагая target = document.querySelector('.ResRoom .infoIcoAfter').innerHTML;

Дополнительное примечание: используйте вместо него textContent, чтобы избежать проблем со стилями, вложенными элементами и т. д.

let target = 'Standard',
    set = [{"desc":"Standard","code":"C1S"},{"desc":"Superior","code":"B2T"},{"desc":"Standard","code":"A1K"}],
    found = set.find(({desc}) => desc === target),
    code = found ? found.code : '';

console.log(code);
2
Ele 19 Сен 2018 в 14:40

В вашем примере есть более одного совпадения для Standard, поэтому функция ниже вернет массив.

var set = [{"desc":"Standard","code":"C1S"},{"desc":"Superior","code":"B2T"},{"desc":"Standard","code":"A1K"}];

function getCodesForType(name, set){
  return set.filter(function(item){ return item.desc == name; }).map(function(item){ return item.code; });
}

console.log(getCodesForType("Standard", set));
0
dgeare 19 Сен 2018 в 14:43