Я настоятельно рекомендую использовать карту замены ключей вместо простого списка новых ключей, поскольку последний сильно зависит от порядка ключей объекта клиента.
Если объект клиента удовлетворяет ключу 1: 1 mapping, go для подхода, аналогичного этому, который отображает список объектов клиента, создавая новый объект клиента на каждом шаге итерации, сокращая список ключевых кортежей с каждым кортежем, содержащим старый и новый ключ ...
function createNewCustomerFromOldOneViaBoundConfig(customer) {
return Object.entries(this).reduce((newCustomer, [key, newKey]) => {
newCustomer[newKey] = customer[key];
return newCustomer;
}, {});
};
const customerKeyReplacementMap = {
customer_name: 'firstname',
customer_age: 'age',
customer_weapon: 'weapon',
customer_email: 'email',
customer_city: 'city'
};
const customers = [{
customer_name: 'Negan',
customer_age: 45,
customer_weapon: 'Bat',
customer_email: 'negan@sanctuary.com',
customer_city: 'Washington'
}, {
customer_name: 'Daryl',
customer_age: 41,
customer_weapon: 'Crossbow',
customer_email: 'daryl.dixon@kickass.com',
customer_city: 'Atlanta'
}, {
customer_name: 'Rick',
customer_age: 45,
customer_weapon: 'Magnum 357',
customer_email: 'rick@alexandria.com',
customer_city: 'King County'
}].map(createNewCustomerFromOldOneViaBoundConfig, customerKeyReplacementMap);
console.log('customers : ', customers);
.as-console-wrapper { min-height: 100%!important; top: 0; }
Как только хотя бы один объект клиента нарушает строгое сопоставление его ключей 1: 1, необходимо изменить подход к созданию и изменение нового объекта клиента из его устаревшего аналога.
Этот случай также доказывает, что любой подход, основанный только на списке заменяющих ключей, действительно ограничен только одним типом клиентов порядок ключей (и структура) объекта ...
function createNewCustomerFromOldOneAndMutateKeysViaBoundConfig(oldCustomer) {
return Object.entries(this).reduce((customer, [oldKey, key]) => {
customer[key] = customer[oldKey];
delete customer[oldKey];
return customer;
}, Object.assign({}, oldCustomer));
};
const customerKeyReplacementMap = {
customer_name: 'firstname',
customer_age: 'age',
customer_weapon: 'weapon',
customer_email: 'email',
customer_city: 'city'
};
const customers = [{
additional_key_1: 'FOO',
customer_name: 'Negan',
customer_age: 45,
additional_key_2: 'BAR',
customer_weapon: 'Bat',
customer_email: 'negan@sanctuary.com',
customer_city: 'Washington'
}, {
additional_key_1: 'BAZ',
customer_name: 'Daryl',
customer_age: 41,
additional_key_2: 'BIZ',
customer_weapon: 'Crossbow',
customer_email: 'daryl.dixon@kickass.com',
customer_city: 'Atlanta'
}, {
additional_key_1: 'FOOBAR',
customer_name: 'Rick',
customer_age: 45,
additional_key_2: 'BAZBIZ',
customer_weapon: 'Magnum 357',
customer_email: 'rick@alexandria.com',
customer_city: 'King County'
}].map(
createNewCustomerFromOldOneAndMutateKeysViaBoundConfig,
customerKeyReplacementMap
);
console.log('customers : ', customers);
.as-console-wrapper { min-height: 100%!important; top: 0; }