Как изменить JSON имя ключа в массиве в NodeJs - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть функция в NodeJS, которая возвращает массив JSON элементов

let rows = function1();

Здесь rows выглядит так:

"rows": [
    {
    "Hostname": "abc123",
    "name": "name1",
    "Status": "PASS",
    "Heading": "Not Applicable"
    },
    {
    "Hostname": "abc123",
    "name": "name2",
    "Status": "FAIL",
    "Heading": "Not Applicable"
    }
]

Здесь, rows может иметь любое количество Json элементов:

"rows": [
    {
    "Hostname": "abc123",
    "name": "name1",
    "Status": "PASS",
    "Heading": "Not Applicable"
    },
    {
    "Hostname": "abc123",
    "name": "name2",
    "Status": "FAIL",
    "Heading": "Not Applicable"
    },
    {
    "Hostname": "abc123",
    "name": "name3",
    "Status": "FAIL",
    "Heading": "Not Applicable"
    },
 ...
]

Во всех JSON элементах Hostname останется имя,

Я хочу изменить rows array таким образом, чтобы он выглядит так:

"rows": [
    {
    "Hostname": "abc123",
    "name1Status": "PASS",
    "name1Heading": "Not Applicable"
    "name2Status": "FAIL",
    "name2Heading": "Not Applicable"
    "name3Status": "FAIL",
    "name3Heading": "Not Applicable"
     ...
]

1 Ответ

1 голос
/ 27 апреля 2020

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

const rows = [
    {
    "Hostname": "abc123",
    "name": "name1",
    "Status": "PASS",
    "Heading": "Not Applicable"
    },
    {
    "Hostname": "abc123",
    "name": "name2",
    "Status": "FAIL",
    "Heading": "Not Applicable"
    }
]
const res = rows.reduce((acc, rec) => {
	let result = { ...acc, [`Hostname`]: rec.Hostname,  [`${rec.name}Status`]: rec.Status, [`${rec.name}Heading`]: rec.Heading  }
	return result
}, [])
console.log(res)
...