Dark_Scorpion
@Dark_Scorpion

Как обработать динамические таблицы с правильной выгрузкой данных?

Надо правильно обработать данные из таблицы переместив данные в объект для последующей выгрузки. Заголовки и их порядок в таблице разный.
Пример: у одной таблицы : марка машины, марка двигателя, объём двигателя, дата выпуска. У второй: марка машины, артикул, тип двигателя, объём двигателя. И вариантов много, но нужно чтоб объект содержал все возможные поля и правильно присваивал значения в зависимости от заголовков. Как такое реализовать в javascript ну или пример алгоритма на другом языке.
  • Вопрос задан
  • 2304 просмотра
Решения вопроса 1
Dark_Scorpion
@Dark_Scorpion Автор вопроса
Увидел уведомления о своём вопросе, и решил отписаться как всё таки тогда решил проблему на js
1) Создал шаблонный объект который имеет все нужные поля и клонировал когда создавал новый.
2) Создал ассоциативный массив соответствий, например {машина: car, дата выпуска: releaseDate} (titleArr)
3) Пробегался по первой строке таблицы считывая значение, ища его в массиве соответствий и записывая английское имя из массива. titleArr -> keyArr
4) Ну а потом просто пробегался по строке таблицы и первое значения записывал с первым ключом из итогового массива п.3, второе со вторым и т.д resultObj[keyArr[i]] = rowDataArr[i];
ВАЖНО: У этого алгоритма есть слабое место которое надо учесть: нужно знать ВСЕ возможные названия столбцов для п.2 Иначе можете потерять данные и более того вся таблица съедет. На всякий случай стоит сделать проверку длин массивов из п.3 (tirleArr.length == keyArr.length) Если вдруг нужного значение в массиве соответствий не будет, то и длинны будут разные и вы будете знать где искать проблему.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
undassa
@undassa
Last.Backend
попробуйте сделать объект содержащий все возможные поля таблицы:
var etalon = {
   type: '',
   engine: '',
   date : ""
}


затем берёте неполный объект что у вас есть, например
var car = {
   type: 'tesla',
   date : '01.11.2014'
}


и делаете новый объект с наследованием (например через библиотеку lodash):

var a = _.extend({},etalon,car);

console.log(a);
/*
{
   type: 'tesla',
   engine: '',
   date : "01.11.2014"
}
*/


получите необходимый вам объект, где не заполненные поля будут заполнены по default значениям.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы