Как динамически добавить массив к объекту? - PullRequest
2 голосов
/ 11 января 2020

Чего я пытаюсь достичь

Я пытаюсь динамически добавить массив к объекту. То есть начиная с

 {colour: "white", type: "electric"};

и заканчивая

{colour: "white", type: "electric", owners: ["person1", "person2", "person3"] };

Рассмотрим следующий объект ниже

let car = {colour: "white", type: "electric"};

Если я хочу добавить другое свойство к этому объекту Я могу проверить, существует ли он. Затем добавьте к нему следующее:

if( typeof car.status === "undefined")
    car.status = "sold";

Что я пробовал

Используя вышеупомянутые логи c Я попробовал следующее

let car = {
  colour: "white",
  type: "electric"
};

if (typeof car.owners === "undefined")
  car.owners.push("person1");

но это не работает.

Вопрос

Как добавить массив к объекту?

Ответы [ 2 ]

4 голосов
/ 11 января 2020

Чтобы добавить массив к объекту, вы создаете массив и назначаете его свойству:

let car = {
  colour: "white",
  type: "electric"
};

if (typeof car.owners === "undefined") {
  //           vvvvvvvvvvv----- creates the array
  car.owners = ["person1"];
  // ^^^^^^^^^--- assigns it to the property
}

console.log(car);

Если вы хотите добавить к этот массив позже, вы можете использовать push. Но массив должен существовать первым. Например, что-то вроде:

// `person` has the person to add...
if (typeof car.owners === "undefined") {
  car.owners = [person];
} else {
  car.owners.push(person);
}

Тем не менее, лучше избегать ненужного изменения формы объектов. Я бы просто начал с пустого массива и покончил бы с if:

let car = {
  colour: "white",
  type: "electric",
  owners: [] // <=== Empty array
};

car.owners.push("person1");

console.log(car);
3 голосов
/ 11 января 2020
  1. Если свойство status существует в объекте, то оно следует приведенному ниже коду
let car = {colour: "white", type: "electric",status:"somethings!"};
if(car.status){
  car.status = "sold";
}
console.log(car)
// o/p { colour: 'white', type: 'electric', status: 'sold' }
Если свойство status не существует в объекте, оно следует приведенному ниже коду
let car = {colour: "white", type: "electric"};
if(car.status){
  car.status = "sold";
}
console.log(car)
// o/p { colour: 'white', type: 'electric' }
Если свойство Array проверяется внутри объекта, вы должны следовать приведенному ниже примеру кода
let car = {colour: "white", type: "electric"};
if(car.owners){
  // when the owners property exist 
  car.owners.push("person1");
} else {
  // when the owners property does not exist
  car.owners = [];
  car.owners.push("person2");
}
console.log(car)

// o/p { colour: 'white',type: 'electric',owners: [ 'person2' ] }
...