Javascript объекты из API в табличные данные js объекты - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу преобразовать данные из API в tabledata. var serverdata будет заполняться циклом foreach.

первый цикл заполняет данные сервера.

var serverdata = {
    0: {certname: "server1", environment: "production", name: "id", value: "PROD\server1$"}
    1: {certname: "server1", environment: "production", name: "fqdn", value: "server1.prod.com
    2: {certname: "server1", environment: "production", name: "domain", value: "prod.com
    3: {certname: "server1", environment: "production", name: "osfamily", value: "windows"}
    4: {certname: "server1", environment: "production", name: "uptime", value: "11 days"}
    5: {certname: "server1", environment: "production", name: "network", value: "192.168.0.1"}
    6: {certname: "server1", environment: "production", name: "virtual", value: "physical"}
    7: {certname: "server1", environment: "production", name: "hostname", value: "server1"}
    8: {certname: "server1", environment: "production", name: "serverphase", value: "in use"}
    }

Первый вывод должен быть:

var tabledata = {
    0: {hostname: "server1", id: "PROD\server1$", fqdn: "server1.prod.com", domain: "prod.com", osfamily: "windows", uptime: "11 days", network: "192.168.0.1", virtual: "physical", serverphase: "in use" }
    }

Затем цикл заполняет данные сервера новыми данными.

var serverdata = {
    0: {certname: "server2", environment: "production", name: "id", value: "acc\server2$"}
    1: {certname: "server2", environment: "production", name: "fqdn", value: "server1.acc.com
    2: {certname: "server2", environment: "production", name: "domain", value: "acc.com
    3: {certname: "server2", environment: "production", name: "osfamily", value: "windows"}
    4: {certname: "server2", environment: "production", name: "uptime", value: "13 days"}
    5: {certname: "server2", environment: "production", name: "network", value: "192.168.0.2"}
    6: {certname: "server2", environment: "production", name: "virtual", value: "physical"}
    7: {certname: "server2", environment: "production", name: "hostname", value: "server2"}
    8: {certname: "server2", environment: "production", name: "serverphase", value: "in use"}
    }

Следующие выходные данные должны быть:

var tabledata = {
    0: {hostname: "server1", id: "PROD\server1$", fqdn: "server1.prod.com", domain: "prod.com", osfamily: "windows", uptime: "11 days", network: "192.168.0.1", virtual: "physical", serverphase: "in use" }
    1: {hostname: "server2", id: "acc\server2$", fqdn: "server2.acc.com", domain: "acc.com", osfamily: "windows", uptime: "13 days", network: "192.168.0.2", virtual: "physical", serverphase: "in use" }
    }

и т. Д.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Редактировать: так как я не уверен, как вы используете его, я постараюсь привести вам полный пример использования

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

Сначала вы хотите создать функцию, которая преобразует одну запись серверных данных в запись табличных данных

const fromServerDataEntryToTableDataEntry = (serverdata) => {
    return Object.values(serverdata).reduce((acc, cv) => 
           ({...acc, [cv.name]: cv.value}), {})
}

Затем вы можете использовать эту следующую функцию, она получает массив серверных данных и анализирует каждую из них. в нужный формат записи табличных данных, теперь у нас есть массив объектов, где каждый объект является записью табличных данных, в качестве последнего шага мы конвертируем этот массив в желаемый конечный объект

const buildTableData = (arrayOfServerDatas) => {
    let dataTableArray = arrayOfServerDatas.map(ele => { 
        return fromServerDataEntryToTableDataEntry(ele)
    })
    return Object.assign({}, dataTableArray)
}
0 голосов
/ 05 ноября 2019

Вы можете просто написать функцию, которая принимает один массив серверных данных и возвращает один элемент для ваших табличных данных:

const convert = (serverdata) => {
    // define columns, or pass them if they differ
  const columns = [
    "id",
    "fqdn",
    "domain"
  ];
  let ret = {};
  columns.forEach((item, index) => {
    ret[item] = serverdata[index]["value"];
  });
  return ret;
}

let serverdata = {
    0: {certname: "server1", environment: "production", name: "id", value: "PROD\server1$"},
    1: {certname: "server1", environment: "production", name: "fqdn", value: "server1.prod.com"},
    2: {certname: "server1", environment: "production", name: "domain", value: "prod.com" }
    }

console.debug(convert(serverdata));
// or instead add to your tabledata array

Хорошо ли я понял ваш вопрос, и помогает ли это вам?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...