Разместить значение из json в input
У меня есть два инпута (может быть и больше) каждый имеет одинаковое имя для формирования массива, в данном случае name="cards[уникальное имя]". Кроме того, есть json из которого мне нужно достать данные по ключу и разместить их в value соответствующего инпута. Т.е. я сравниваю ключ в json c именем инпута и размещаю там значение.
var content = '{"cards":{"title":"1","text":"2"},"active":"1","ver":"v1","sort":"3"}';
var obj = jQuery.parseJSON(content);
var arr = [];
$('.form-component').each(function() {
arr.push($(this).attr('name'));
});
arr.forEach(function(arr) {
$('.form-component[name="' + arr + '"]').val(obj[arr]);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<input class="form-component" name="cards[title]" value="">
<input class="form-component" name="cards[text]" value="">
<input class="form-component" name="active" value="">
По коду делаю следующее: собираю все инпут с одинаковым классом и получаю их имена. Формирую из них массив. Потом прохожусь по массиву с именами и подставляю его в obj[arr].
Если инпуты имеет простое имя, например, name="active". То всё работает, а если с name="cards[title]", то нет. Или если вручную указать так: obj.cards['title'] - то же всё хорошо.
Ответы (1 шт):
Конкретно эта задача имеет довольно простое решение:
let content = '{"cards": {"title": "1", "text": "2"}, "active": "1", "ver": "v1", "sort": "3"}';
let obj = jQuery.parseJSON(content);
$(".form-component").each(function () {
let name = $(this).attr("name").match(/([\w_-]+)/gi);
$(this).val(name.length == 2 ? obj[name[0]][name[1]] : obj[name[0]]);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<input class="form-component" name="cards[title]" value=""> cards-title<br>
<input class="form-component" name="cards[text]" value=""> cards-text<br>
<input class="form-component" name="active" value=""> active
Остаётся добавить проверку для случаев, когда могут отсутствовать какие-либо ключи.