#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. Если вы измените один из элементов, другой также изменится.