#jquery
#jquery ( jquery )
Вопрос:
У меня есть объект с данными в формате:
{
"genres": [{
"genreId": 1,
"genre": "Horror",
"publishers": [{
"publisher": "Random House",
"authors": [{
"author": "Stephen King",
"publishedYears": [2010, 2011]
}]
}, {
"publisher": "Penguin",
"authors": [{
"author": "William Shakespeare",
"publishedYears": [2004, 2006]
}]
}]
}]
}
Я пытаюсь добавить данные в соответствующие разделы, чтобы из выпадающего списка я мог выбрать издателя или автора.
Итак, я выбираю Random House, а затем автора «Джейн Смит», я хочу добавить ее в раздел Random house, чтобы это выглядело так:
{
"publisher": "Random House",
"authors": [{
"author": "Stephen King",
"publishedYears": [2013, 2014],
}, {
"author": "Jane Smith",
"publishedYears": [2013],
}]
}
В данный момент я делаю:
$('#addAuthor').on('click', function () {
var obj = sender.data('obj');
var publisher = $('#pubdropdown').val();
var author = $('#authordropdown').val();
var newObj = [];
newObj.push({
'publisher': publisher,
'authors': [{
'author': author,
'publishedYears': []
}]
});
})
Но каждый раз это просто добавление еще одной записи, так что в итоге я получаю 2 записи Random House.
Итак, я знаю, что мне нужно просмотреть ‘obj’ и проверить его, чтобы узнать, существует ли издатель, если он просто нажимает элемент author. Однако как я могу проверить значение obj на соответствие newObj, когда newObj не существует, пока он уже не был нажат?
Я пробовал что-то вроде:
for (i = 0; i < data.genres.length; i ) {
for (j = 0; j < data.genres[i].publishers.length; j ) {
if (data.genres[i].publishers[j].publisher == newObj.publisher) {
//push author only
} else {
newObj.push({
'publisher': publisher,
'authors': [{
'author': author,
'publishedYears': []
}]
});
}
}
}
Комментарии:
1. Разве вы не можете просто проверить переменную publisher, которую вы устанавливаете внутри newObj? Вы должны знать издателя, которого ищете?
Ответ №1:
for (i = 0; i < data.genres.length; i ) {
for (j = 0; j < data.genres[i].publishers.length; j ) {
if (data.genres[i].publishers[j].publisher === newObj[0].publisher) {
data.genres[i].publishers[j].authors.push({
'author': newObj[0].authors[0].author,
'publishedYears': []
});
} else {
data.genres[i].publishers.push(newObj[0]);
}
break;
}
}
JSFiddle (проверка объекта в консоли)