Зацикливание объекта и присвоение значения массиву объектов, если выполняются определенные условия - vanilla JavaScript - PullRequest
0 голосов
/ 30 октября 2018

Скажем, у меня есть такой объект (здесь может быть много предметов);

myObject:{
 item1: {
  visible: true;
 },
 item2: {
  visible: true;
 },
 item3: {
  visible: false;
 },
}

и затем массив таких объектов (здесь может быть много элементов);

var objs = [ 
    { name: 'item1', visible: false },
    { name: 'item2', visible: false },
    { name: 'item3', visible: false }
];

Как выполнить итерацию по объекту и присвоить значение visible для массива только при совпадении имен - Если Item1 в объекте равен visible: false, то item1 в массиве должен отразить, что

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

const myObject = {
 item1: {
  visible: true
 },
 item2: {
  visible: true
 },
 item3: {
  visible: false
 }
};


var objs = [ 
    { name: 'item1', visible: false },
    { name: 'item2', visible: false },
    { name: 'item3', visible: false }
];

Object.getOwnPropertyNames(myObject).forEach(propertyName => {
  let obj = objs.find(o => o.name === propertyName);
  if (obj) {
    obj.visible = myObject[propertyName].visible;
  }
});

console.log(objs);
0 голосов
/ 30 октября 2018

Самый эффективный способ - циклически проходить по массиву, так как вы выполняете его только один раз.

const myObject = {
 item1: {
  visible: true
 },
 item2: {
  visible: true
 },
 item3: {
  visible: false
 }
};


var objs = [ 
    { name: 'item1', visible: false },
    { name: 'item2', visible: false },
    { name: 'item3', visible: false }
];

objs.forEach(obj => {
  const property = myObject[obj.name];
  if (property) {
    obj.visible = property.visible;
  }
});


console.log(objs);
0 голосов
/ 30 октября 2018

Выполните цикл над myObject и найдите объект в objs, используя find , затем установите значение этого найденного объекта:

for (let o in myObject) {
  let obj = objs.find(i => i.name == o)
  if(!obj) continue
  obj.visible = myObject[o].visible
}

Вот рабочий пример:

const myObject = {
 item1: {
  visible: true
 },
 item2: {
  visible: true
 },
 item3: {
  visible: false
 }
}

var objs = [ 
    { name: 'item1', visible: false },
    { name: 'item2', visible: false },
    { name: 'item3', visible: false }
]

for (let o in myObject) {
  let obj = objs.find(i => i.name == o)
  if(!obj) continue
  obj.visible = myObject[o].visible
}

console.log(objs)
...