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

aqva1

Пользователь
Регистрация
28.12.11
Сообщения
2
Реакции
0
Баллы
1
У меня есть вызов отдыха, который возвращает мне данные в следующем формате. Чтобы использовать ее, мне нужно, чтобы она выглядела как моя «желаемая» переменная, но я даже не приближаюсь к этому. Что мне делать?


"{'companies':[{'name':'projects/gvLygwLmSqyPNlYI6mOV'},{'name':'projects/ldkfgalfkjsdlfkjs'}]}"

Код (javascript): и вот что я получаю из вывода.companies.entries()
Проблема с картой Javascript


и из 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));
Код (разметка): Как правильно переработать массив, чтобы получить «желаемую» структуру?
 

Norman1

Пользователь
Регистрация
09.11.15
Сообщения
1
Реакции
0
Баллы
1
ок, у меня это работает

Код:
 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):
 
Сверху Снизу