Как сделать обработку array в js данным образом?
Здравствуйте! Никак не могу разобраться, как мне можно сделать следующее..
1. Есть динамическое добавление полей (каждому новому полю присваивается свой новый индекс от 0 и выше):
2. За тем в контроллере обрабатываю форму ну и выход выходит следующим образом если поля не валидные. В js код для вывода следующий:
console.log(data.error);
На выходе:
Как мне обработать это правильно? Если таких полей будет даже 10 или 15, то логика обработки всех полей одинакова:
document.getElementById('invalid-year_' + data.error.years.??).innerHTML = '<strong>' + data.error.years.?? + '</strong>'; |
document.getElementById('invalid-year_' + data.error.years.??).innerHTML = '<strong>' + data.error.years.?? + '</strong>';
Вот как мне вместо вопросов (??) получить то что в консоли, 0 или 1 или другие цифры. Т.к. если я вторые поля все заполню, то соответственно останутся ошибки где после точки 0
Но это не работает конечно (уже пытался и так и сяк сделать).
Ошибки формирует Laravel следующим кодом:
$validator = Validator::make($request->all(), [ 'marks' => ['array', 'required'], 'marks.*' => ['required', 'not_in:0'], 'models' => ['array', 'required'], 'models.*' => ['required', 'not_in:0'], 'modifications' => ['array', 'required'], 'modifications.*' => ['required', 'not_in:0'], 'years' => ['array', 'required'], 'years.*' => ['required', 'not_in:0'] ]); if($validator->fails()) { return response()->json([ 'error' => $validator->getMessageBag()->toArray() ]); } |
$validator = Validator::make($request->all(), [ 'marks' => ['array', 'required'], 'marks.*' => ['required', 'not_in:0'], 'models' => ['array', 'required'], 'models.*' => ['required', 'not_in:0'], 'modifications' => ['array', 'required'], 'modifications.*' => ['required', 'not_in:0'], 'years' => ['array', 'required'], 'years.*' => ['required', 'not_in:0'] ]); if($validator->fails()) { return response()->json([ 'error' => $validator->getMessageBag()->toArray() ]); }
Дополнительно:
Следующий код конечно будет работать, но это занимает много места и не очень то практично, может есть какие то по лучше варианты?
if(data.error.years.0) { document.getElementById('invalid-year_0').innerHTML = '<strong>' + data.error.years.0 + '</strong>'; } ... ETC 19 таких же строк например ... if(data.error.years.20) { document.getElementById('invalid-year_20').innerHTML = '<strong>' + data.error.years.20 + '</strong>'; } |
if(data.error.years.0) { document.getElementById('invalid-year_0').innerHTML = '<strong>' + data.error.years.0 + '</strong>'; } ... ETC 19 таких же строк например ... if(data.error.years.20) { document.getElementById('invalid-year_20').innerHTML = '<strong>' + data.error.years.20 + '</strong>'; }
Ответы:
в цикле по ошибкам
if(data.error.years[i]) { document.getElementById('invalid-year_'+i).innerHTML = '<strong>' + data.error.years[i] + '</strong>'; } |
if(data.error.years[i]) { document.getElementById('invalid-year_'+i).innerHTML = '<strong>' + data.error.years[i] + '</strong>'; }
-
r_'.i
мне тоже переключение не сразу дается :)
- Дмитрий, да, бывает )
- Я уже пытался делать циклом таким образом, но так выползает ошибка.
Сам код (предположим что таких записей может быть не более 20):
for (const property in data.error) { for(i=0; i < data.error[property].length; i++){ document.getElementById('invalid_'+property+'_' + i).innerHTML = '<strong>' + data.error[property][i] + '</strong>'; } } |
for (const property in data.error) { for(i=0; i < data.error[property].length; i++){ document.getElementById('invalid_'+property+'_' + i).innerHTML = '<strong>' + data.error[property][i] + '</strong>'; } }
- Все равно ошибка...
- Вадим Найденко,
1. а вы знакомы с правилами ресурса - который говорит скриншотами общаться нельзя? Если бы я свой код вам отдал скриншотм вы бы как отреагировали?
2. Насколько я могу прочесть ошибку - он говорит что результат document.getElementById = null а у null нельзя выставить innerHTML - я чего-то не понимаю или в ларавел ответ с ошибками идет в формате json,а автор пытается обращаться с ним как с массивом?
- Kentavr16,
1. Ну вообще у него в контроллере стоит response()->json()
2. В js можно к обьекту обращаться как к массиву. document['location'] === document.location - Дмитрий, я к тому что у него в ответе years.0 - это просто строка-ключ, к которой нет смысла обращаться как к years[i]? Или я туплю?
- Kentavr16, это так ларка показывает. Ибо обращение к массиву в правилах валидатора идет как name_of_array.0
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос







Для обработки массива в JavaScript можно использовать различные методы, в зависимости от того, что именно вы хотите сделать с массивом. Ниже я приведу несколько примеров работы с массивами в JavaScript.
1. **Перебор массива**:
Для перебора массива вы можете использовать циклы, например, цикл for или метод forEach.
```html
var array = [1, 2, 3, 4, 5]; // Цикл for for (var i = 0; i < array.length; i++) { console.log(array[i]); } // Метод forEach array.forEach(function(element) { console.log(element); });
```
2. **Фильтрация массива**:
Для фильтрации массива вы можете использовать метод filter.
```html
var array = [1, 2, 3, 4, 5]; var filteredArray = array.filter(function(element) { return element > 2; }); console.log(filteredArray); // [3, 4, 5]
```
3. **Преобразование массива**:
Для преобразования массива вы можете использовать метод map.
```html
var array = [1, 2, 3, 4, 5]; var mappedArray = array.map(function(element) { return element * 2; }); console.log(mappedArray); // [2, 4, 6, 8, 10]
```
4. **Сворачивание массива**:
Для сворачивания массива в одно значение вы можете использовать метод reduce.
```html
var array = [1, 2, 3, 4, 5]; var reducedValue = array.reduce(function(accumulator, currentValue) { return accumulator + currentValue; }, 0); console.log(reducedValue); // 15
```
Это лишь небольшой обзор методов работы с массивами в JavaScript. Вы можете комбинировать эти методы или использовать другие в зависимости от вашей конкретной задачи. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.