Извините за заголовок, он ограничен 150 символами.
Пример полного кода:
https://jsfiddle.net/c81zw30m/
Данные:
Допустим, я делаю запрос API и получаю возвращенный объект JSON:
[
{
id: 123,
person: {
data: {
name: 'John',
language: 'Javascript'
}
},
details: {
age: 25
},
has_experience: true
},
{
id: 456,
person: {
data: {
name: 'Peter',
language: null // here we have null as a value.
}
},
details: {
age: 40
},
has_experience: false
},
{
id: 789,
person: {
data: {
name: 'Paul',
language: 'Python'
}
},
details: {
age: 30
},
has_experience: null // and here we also don't know if the person is available
},
];
Цель:
Конечная цельздесь нужно перебрать массив и получить новый массив объектов с разными именами ключей.Например, я хочу заменить ключ person
на human
или ключ available
на availability
.
Кроме того (дополнительно) мы хотим пропустить добавление ключей, значение которых равноnull
.
Текущее решение:
let results = [];
for (let i=0; i< json.length; i++) {
results.push({
user_id: json[i].id,
name: json[i].person.data.name,
age: json[i].details.age,
has_experience: json[i].available ? json[i].available : false // here we are assigning a value no matter what using a ternary operator, what if we want no key:value pair here, just skip that pair
});
if (json[i].person.data.language) { results[i].language = json[i].person.data.language }
}
console.log(results);
Проблема:
Теперь приведенный мной пример и решение работает, но представьте, если бы исходный запрос API имел сотни пар ключ: значение, и многие из них могли бы иметь значение null
.
Вопрос:
Использование современныхjavascript, есть ли какой-нибудь менее многословный и более чистый и элегантный способ решения этой проблемы?
В целом, я ищу создание совершенно нового массива объектов на основе оригинального, но с новыми именами ключей, где это необходимо,Кроме того, мы хотим пропустить добавление некоторых из них, например, если значение ключа равно null
.
Cheers.
EDIT:
Изменилось имя ключа из примера, изначально предоставленного с available
на has_experience
, потому что это немного вводило в заблуждение.Я не ищу, чтобы отфильтровать исходный массив объектов на основе значения данного ключа.Если бы я хотел сделать это, я бы начал с filter
, а затем включил цепочку.
Что я хочу сделать, это исключить добавление пары ключ: значение во вновь сформированный массив, если значение ключаэто null
например.