Итак, я нашел несколько примеров того, как найти первый экземпляр ключа в объекте, но я не смог найти, как найти и изменить только имя этого первого вхождения.
Чтобы уточнить, у меня в настоящее время есть функция, которая перебирает объект и изменяет имена свойств, если они перечислены для изменения. Например, 'first_name' будет 'firstName', 'customer' будет 'индивидуальный' и т. Д. c.
В некоторых местах есть также свойство 'id', но я хочу только изменить 'id 'to' customerId 'для первого экземпляра, где' id 'найден.
По сути, я хочу, чтобы этот объект
{
"id": "12345",
"location": {
"id": "400",
"name": "New York",
},
"customer": {
"id": "2222",
"first_name": "Bob",
"last_name": "Jones"
},
"address": [
{
"line1": "123 Sesame Street",
"city": "Springfield",
"country": "US",
"state": "NY"
}
],
}
выглядел как
{
"customerId": "12345",
"location": {
"id": "400",
"name": "New York",
},
"individual": {
"id": "2222",
"firstName": "Bob",
"lastName": "Jones"
},
"address": [
{
"line1": "123 Sesame Street",
"city": "Springfield",
"country": "US",
"state": "NY"
}
],
}
В данный момент моя функция меняет все экземпляры 'id' на 'customerId' , но я хочу, чтобы это произошло только для первого идентификатора, найденного в объекте. Пока моя функция такова:
const restructure = obj => {
Object.fromEntries = arr => Object.assign({}, ...Array.from(arr, ([k, v]) => ({ [k]: v })));
if (typeof obj !== 'object' || obj === null) {
return obj;
}
if (Array.isArray(obj)) {
return obj.map(restructure);
}
return Object.fromEntries(
Object.entries(obj).map(([key, val]) => [
keyChanges[key] || key,
restructure(val),
])
);
};
Где keyChanges
- это переменная, в которой перечислены новые имена, на которые следует изменить, если они найдены.
const keyChanges = {
id: 'customerId',
customer: 'individual',
first_name: 'firstName',
middle_name: 'middleName',
last_name: 'lastName',
};
Мои попытки решить эту проблему к сожалению, всегда влияет на другие экземпляры id. Любые указатели будут искренне оценены:)