Как проверить, все ли объекты в массиве объектов имеют определенную структуру и не являются нулем?

#javascript #angular

#javascript #angular

Вопрос:

Я получаю массив объектов с сервера. Но мое приложение ломается, потому что некоторые объекты не имеют структуры, а имеют только нулевое значение, и моя логика зависит от проверки по определенным ключам объекта, чтобы сделать то или иное. Вот пример массива, который я получаю:

 [{
  clienTnames: {
    firstName: 'Jack',
    lastName: 'Jackson'
  }
}, {
  clienTnames: {
    firstName: 'John',
    lastName: 'Johnson'
  }
}, {
  clienTnames: null
}]
  

Я хотел бы проверить, поступают ли какие-либо объекты как null, и если они действительно переключают их на пустой объект со всеми надлежащими ключами, просто без значения. Итак, если я получаю clienTnames: null; Я хотел бы автоматически изменить его на clienTnames: {FirstName: ‘ ‘, LastName: ‘ ‘}

Ответ №1:

Просто используйте функцию map:

 names = names.map(name => {
  return name.clienTnames
    ? name.clienTnames
    : { clienTnames: { firstName: '', lastName: '' } }
});
  

Ответ №2:

Вы можете создать defaultObj со всеми свойствами по умолчанию. Затем выполните цикл по массиву и обновите элементы, для clienTnames свойства которых установлено значение null

 let array = [{clienTnames:{firstName:'Jack',lastName:'Jackson'}},{clienTnames:{firstName:'John',lastName:'Johnson'}},{clienTnames:null}]

const defaultObj = {
  firstName: '',
  lastName: ''
}

array.forEach(a => {
  if(!a.clienTnames) 
    a.clienTnames = { ...defaultObj }
})

console.log(array)  

Комментарии:

1. Не используйте defaultObj , поскольку все элементы массива будут указывать на один и тот же объект.

2. @ritaj Этого не произойдет. Он создает клон, используя синтаксис распространения в каждом цикле

3. Извините, я прокомментировал неправильный ответ. Проверьте приведенный ниже.

Ответ №3:

Вы можете сделать что-то вроде этого:

 const data = [{ clienTnames: { firstName: 'Jack', lastName: 'Jackson' } }, { clienTnames: { firstName: 'John', lastName: 'Johnson' } }, { clienTnames: null }];

let output = [];

output = data.map(element => {
    if (element.clienTnames) {
        return element;
    } else {
        return { clienTnames: { firstName: '', lastName: '' } };
    }
});

console.log(output);  

Ответ №4:

 let array = [{
  clienTnames: {
    firstName: 'Jack',
    lastName: 'Jackson'
  }
}, {
  clienTnames: {
    firstName: 'John',
    lastName: 'Johnson'
  }
}, {
  clienTnames: null
}];

let targetArray;

targetArray = array.map((item) => {
  if(!item.clienTnames) {
    return { clienTnames: { firstName: '', lastName: '' } }
  }

  return item;
})

  

Комментарии:

1. Не используйте defaultObj , поскольку все элементы массива будут указывать на один и тот же объект.

2. Что произойдет?

3. Если вы измените один из элементов, другой также изменится.