javascript - 如何仅更改对象中键的第一个实例
问题描述
因此,我找到了许多关于如何在对象中找到键的第一个实例的示例,但我无法找到如何找到并仅更改第一个出现的名称。
澄清一下,我目前有一个函数可以循环遍历一个对象并更改属性名称,如果它们被列为要更改的话。例如,“first_name”是“firstName”,“customer”是“individual”等。
在许多地方还有属性“id”,但我只想在找到“id”的第一个实例中将“id”更改为“customerId”。
基本上,我想要这个对象
{
"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”,但我只希望它发生在对象中找到的第一个“id”。到目前为止,我的功能是,
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),
])
);
};
WherekeyChanges
是一个变量,列出了如果找到新名称应更改的内容。
const keyChanges = {
id: 'customerId',
customer: 'individual',
first_name: 'firstName',
middle_name: 'middleName',
last_name: 'lastName',
};
不幸的是,我解决这个问题的尝试总是最终影响到“id”的其他实例。任何指针将不胜感激:)
解决方案
我假设你有一个类似映射器的东西,它会遍历你的对象数组中的每一个项目。您需要做的是添加代码块,该代码块只会为您的地图函数中的第一项执行。
例如:
myArrayOfObjects.map((item, index) => {
if(index == 0) {
<here goes your function to change the key from "id" to "customerId">
}
})
推荐阅读
- c++ - 如何在 C++ 中清除 Windows 上基于天的日志文件?
- uwp - UWP 的 AR 库?
- batch-file - 如何从网络用户帐户中过滤主目录位置?
- android - Android AR场景形式垂直旋转
- applescript - 如何在 applescript 中使用参数运行 DiffMerge?
- jenkins-groovy - 如何在 Jenkins Post 块中定义代理/节点
- sql - Oracle SQL:如何计算区分大小写列的 AVG?
- wordpress - 在商品购物车数据之后在 Woocommerce 购物车中显示产品 ACF 自定义字段
- python - 为什么 list( ) 和 tuple( ) 在 python 中将字符串扩展为单独的字符,而 [ ... ] 和 ( ... , ) 没有
- ios - 如何在没有 Xcode 的情况下启用推送通知和后台模式