Как сохранить порядок ввода в javascript? - PullRequest
0 голосов
/ 14 января 2020

Вот формат, который генерирует мой код:

[
    {
        "certifications": [
            {
                "certificate": "NA",
                "completed_on": "2019-09-24T18:30:00.000Z",
                "tc_name": "TC-174195"
            }
        ],
        "firstname": "Dipak",
        "lastname": "Das",
        "email": "dasdipak99@gmail.com"
    }
]

И я хотел создать такой формат:

[
  {
    firstname: "Dipak",
    lastname: "Das",
    email: "dasdipak99@gmail.com",
    certifications: [
      {
        certificate: "NA",
        completed_on: "2019-09-24T18:30:00.000Z",
        tc_name: "TC-174195"
      }
    ]
  }
]

Ниже мой код:

var user = [];
var certificate = {
  certifications: []
};

certificate["firstname"] = rows[0].firstname;
certificate["lastname"] = rows[0].lastname;
certificate["email"] = rows[0].email;

for (let i = 0; i < rows.length; ++i) {
  certificate.certifications.push({
    certificate: rows[i].certification_names,
    completed_on: rows[i].completed_on,
    tc_name: rows[i].tc_name
  });
}

Есть идеи, как сохранить порядок ввода? Я очень новичок в javascript, извиняюсь, если я плохо объяснил.

Ответы [ 2 ]

1 голос
/ 14 января 2020

Начиная с ES6, есть утверждение, что порядок будет

  1. первые цифры в возрастающем количестве
  2. ключи в порядке вставки

Есть это сообщение в блоге и это тема Stackoverflow .

Но ваши строки

var certificate = {
  certifications: []
};

сделали certifications первым свойством. Так что вам понадобится:

var certificate = {};

certificate["firstname"] = "Albert";
certificate["lastname"] = "Lee";
certificate["email"] = "a@b.com";
certificate["certifications"] = [];

certificate.certifications.push({
  certificate: "Java",
  completed_on: "2020/01/02",
  tc_name: "java2020"
});

console.log(certificate);

Чтобы лучше гарантировать заказ, используйте Map, чтобы сохранить первоначальный порядок вставки ключей. Обычно он может вам не понадобиться, но только по какой-то причине, если вы хотите заказать заказ, и вы можете получить такой заказ в течение 1–1042 *:

var certificate = new Map();

certificate.set('firstname', "Albert");
certificate.set('lastname', "Lee");
certificate.set('email', "a@b.com");
certificate.set("certifications", []);
certificate.get("certifications").push({
  "certificate": "Java",
  "completed_on": "2020/01/02",
  "tc_name": "java2020"
})

console.log(certificate);

for (e of certificate) console.log(e)

StackOverflow ничего не печатает для:

console.log(certificate);

с использованием Node или Chrome, это:

Map {
  'firstname' => 'Albert',
  'lastname' => 'Lee',
  'email' => 'a@b.com',
  'certifications' => [
    {
      certificate: 'Java',
      completed_on: '2020/01/02',
      tc_name: 'java2010'
    }
  ]
}
0 голосов
/ 14 января 2020

Инициализируйте пустой массив сертификатов после имени, фамилии и адреса электронной почты:

let rows=[{certification_name:"NA",completed_on:"2019-09-24T18:30:00.000Z",tc_name:"TC-174195"}]

let certificate = {}

certificate["firstname"] = "Dipak"
certificate["lastname"] = "Das"
certificate["email"] = "dasdipak99@gmail.com"
certificate["certifications"] = []
for (let i = 0; i < rows.length; ++i) {
    certificate.certifications.push({
        "certificate": rows[i].certification_names,
        "completed_on": rows[i].completed_on,
        "tc_name": rows[i].tc_name
  })
}

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