Как сделать обработку array в js данным образом?

Ссылка скопирована
1 ответ

Здравствуйте! Никак не могу разобраться, как мне можно сделать следующее..

1. Есть динамическое добавление полей (каждому новому полю присваивается свой новый индекс от 0 и выше):

Как сделать обработку array в js данным образом?

2. За тем в контроллере обрабатываю форму ну и выход выходит следующим образом если поля не валидные. В js код для вывода следующий:
console.log(data.error);
На выходе:

Как сделать обработку array в js данным образом?

Как сделать обработку array в js данным образом?

Как мне обработать это правильно? Если таких полей будет даже 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):

    Как сделать обработку array в js данным образом?

    Как сделать обработку array в js данным образом?

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>'; } }

  • Все равно ошибка...

    Как сделать обработку array в js данным образом?

    Как сделать обработку array в js данным образом?

  • Вадим Найденко,
    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
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Артём Dev Ответ

Для обработки массива в 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);
});

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]

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]

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

var array = [1, 2, 3, 4, 5]; var reducedValue = array.reduce(function(accumulator, currentValue) { return accumulator + currentValue; }, 0); console.log(reducedValue); // 15

```

Это лишь небольшой обзор методов работы с массивами в JavaScript. Вы можете комбинировать эти методы или использовать другие в зависимости от вашей конкретной задачи. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно