Проблема с картой Javascript

  • Автор темы NEWNEO
  • Обновлено
  • 13, May 2024
  • #1
У меня есть вызов отдыха, который возвращает мне данные в следующем формате.

Чтобы использовать ее, мне нужно, чтобы она выглядела как моя «желаемая» переменная, но я даже не приближаюсь к этому.

Что мне делать?
 "{'companies':[{'name':'projects/gvLygwLmSqyPNlYI6mOV'},{'name':'projects/ldkfgalfkjsdlfkjs'}]}"
Код (javascript): и вот что я получаю из вывода.companies.entries()

и из stringify - значения, добавленные с помощью .set(), исключаются
 const result = [ { document: { name: "projects/gvLygwLmSqyPNlYI6mOV", fields: { phone: { stringValue: "888998" }, name: { stringValue: "Test 1" }, claimed: { booleanValue: false } }, createTime: "2022-03-11T10:34:45.795450Z", updateTime: "2022-03-12T07:58:02.209421Z" }, readTime: "2022-03-14T04:32:45.429598Z" }, { document: { name: "projects/ldkfgalfkjsdlfkjs", fields: { phone: { stringValue: "12345" }, name: { stringValue: "Test 2" }, claimed: { booleanValue: false } }, createTime: "2022-03-11T10:34:45.795450Z", updateTime: "2022-03-12T07:58:02.209421Z" }, readTime: "2022-03-14T04:32:45.429598Z" } ]; ("projects/gvLygwLmSqyPNlYI6mOV"); const desired = { companies: [ { path: "projects/gvLygwLmSqyPNlYI6mOV", name: "Test 1", phone: "888998", claimed: false }, { path: "projects/ldkfgalfkjsdlfkjs", name: "Test 2", phone: "12345", claimed: false } ] }; let output = new Map(); output.companies = result.map((company) => { let fields = new Map(); fields.name = company.document.name; const fieldsMap = company.document.fields; for (const [fieldName, fieldDesc] of Object.entries(fieldsMap)) { const fieldValue = fieldDesc[Object.keys(fieldDesc)[0]]; fields.set(fieldName, fieldValue); console.log("fieldDesc: ",fieldDesc); } return fields; }); console.log(output); console.log("output: ", [...output.companies.entries()]); console.log(JSON.stringify(output)); 
Код (разметка): Как правильно переработать массив, чтобы получить «желаемую» структуру?

NEWNEO


Рег
17 Apr, 2007

Тем
69

Постов
178

Баллов
553
  • 18, May 2024
  • #2
ок, у меня это работает

  if ("stringValue" in valMap) val = valMap.stringValue;
 else if ("booleanValue" in valMap) val = valMap.booleanValue;
 else val = "???";


Код (JavaScript): но мне нужен лучший способ справиться с этим битом, когда мне все равно, как называется свойство, оно будет только одно, и мне просто нужно значение.

 const result = [ { document: { name: "projects/gvLygwLmSqyPNlYI6mOV", fields: { name: { stringValue: "Test 1" }, phone: { stringValue: "88878" }, claimed: { booleanValue: false } }, createTime: "2022-03-11T10:34:45.795450Z", updateTime: "2022-03-12T07:58:02.209421Z" }, readTime: "2022-03-14T04:32:45.429598Z" }, { document: { name: "projects/ldkfgalfkjsdlfkjs", fields: { name: { stringValue: "Test 2" }, phone: { stringValue: "12345" }, claimed: { booleanValue: false } }, createTime: "2022-03-11T10:34:45.795450Z", updateTime: "2022-03-12T07:58:02.209421Z" }, readTime: "2022-03-14T04:32:45.429598Z" } ]; const desired = { companies: [ { path: "projects/gvLygwLmSqyPNlYI6mOV", name: "Test 1", phone: "888998", claimed: false }, { path: "projects/ldkfgalfkjsdlfkjs", name: "Test 2", phone: "12345", claimed: false } ] }; const reformatResult = function (result) { return result.map(function (company) { const newMap = { path: company.document.name }; const fields = reformatFields(company.document.fields); var merged = { ...newMap, ...fields }; return merged; }); }; const reformatFields = function (fields) { const output = new Map(); const arr = Object.entries(fields); arr.forEach((entry) => { const label = entry[Object.keys(entry)[0]]; const valMap = entry[1]; if ("stringValue" in valMap) val = valMap.stringValue; else if ("booleanValue" in valMap) val = valMap.booleanValue; else val = "???"; output[label] = val; }); return output; }; console.log("reformatted", reformatResult(result));


Код (JavaScript):
 

Norman1


Рег
09 Nov, 2015

Тем
63

Постов
183

Баллов
508
  • 08, Jun 2024
  • #3
Теперь у меня есть вторая функция, гораздо более сложная, чем работа с PHP.
 const reformatFields = function (fields) {
 const output = new Map();
 const arr = Object.entries(fields);

 arr.forEach((entry) => {
 const label = entry[Object.keys(entry)[0]];
 const valMap = entry[1];
 output[label] = Object.entries(valMap)[0][1];
 });

 return output;
};
Код (JavaScript):
 

Olgaprofectus


Рег
27 Mar, 2011

Тем
58

Постов
221

Баллов
531
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно