yarkov
@yarkov
Помог ответ? Отметь решением.

Как преобразовать ключи объекта вида «key[index]» к массиву?

Господа, как кошерно преобразовать это
{
  list: {
    "action_buttons[0]": "View",
    "action_buttons[1]": "Share",
    "action_buttons[2]": "Download",
    "columns[0]": "Date of Study",
    "columns[1]": "Patient",
    "columns[2]": "File name",
    "columns[3]": "Reporting <br>Physician",
    "columns[4]": "Institution"
  }
}

в
{
  list: {
    "action_buttons": [
      "View", "Share", "Download"
    ],
    "columns": [
      "Date of Study", "Patient", "File name", "Reporting <br>Physician", "Institution" 
    ]
  }
}


Может в lodash какой-то метод есть? Найти не могу.
  • Вопрос задан
  • 105 просмотров
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
var t = {
  list: {
    "action_buttons[0]": "View",
    "action_buttons[1]": "Share",
    "action_buttons[2]": "Download",
    "columns[0]": "Date of Study",
    "columns[1]": "Patient",
    "columns[2]": "File name",
    "columns[3]": "Reporting <br>Physician",
    "columns[4]": "Institution"
  }
};

var list = {};
var re = /^(.*?)\[(\d+)\]$/;
var match;
for (var prop in t.list) {
  match = prop.match(re);
  if (typeof list[match[1]] == "undefined") {
    list[match[1]] = [];
  }
  list[match[1]][match[2]] = t.list[prop];
}
t.list = list;
console.log(t);

{…}
​   list: {…}
​​      action_buttons: […]
​​​         0: "View"
​​​         1: "Share"
​​​         2: "Download"
​​​      columns: […]
​​​         0: "Date of Study"
​​​         1: "Patient"
​​​         2: "File name"
​​​         3: "Reporting <br>Physician"
​​​         4: "Institution"
​
Ответ написан
const result = {};
const list = {
    "action_buttons[0]": "View",
    "action_buttons[1]": "Share",
    "action_buttons[2]": "Download",
    "columns[0]": "Date of Study",
    "columns[1]": "Patient",
    "columns[2]": "File name",
    "columns[3]": "Reporting <br>Physician",
    "columns[4]": "Institution"
};

Object.keys(list).forEach(key => {
  const value = list[key];
  const combinedKey = key.replace(/\[.+\]/, '');
  if (Array.isArray(result[combinedKey])) {
    result[combinedKey].push(value);
  } else {
    result[combinedKey] = [value];
  }
});

console.log(result);
Ответ написан
Комментировать
@iljaGolubev
опоздал ))
Ещё hasOwnProperty не плохо бы использовать.
spoiler
var l={
  list: {
    "action_buttons[0]": "View",
    "action_buttons[1]": "Share",
    "action_buttons[2]": "Download",
    "columns[0]": "Date of Study",
    "columns[1]": "Patient",
    "columns[2]": "File name",
    "columns[3]": "Reporting <br>Physician",
    "columns[4]": "Institution"
  }
};

var n = {};
for (var item in l.list) {
    if (l.list.hasOwnProperty(item)) {
    r = item.replace(/\[\d\]/,'');
    if(n[r]==undefined){ n[r]=[] }
    n[r].push(l.list[item]);
    }
}
l.list = n;
console.log(l);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы