cow*_*azy 7 javascript javascript-objects
我的 javascript 对象如下所示:
const someObj = {
arr1: ["str1", "str2"],
arr2: ["str3", "str4"]
}
Run Code Online (Sandbox Code Playgroud)
在尝试重命名键(例如arr1)时,我最终删除了现有键并使用原始值编写了一个新键。变化的顺序obj。
someObj = {
arr2: ["str3", "str4"],
renamedarr1: ["str1", "str2"]
}
Run Code Online (Sandbox Code Playgroud)
如何在保留密钥顺序的同时重命名密钥?
最后是用js-vanila的方式解决的,而不是react的方式。
如果有人寻找类似的解决方案,我将发布我最终使用的代码。受到卢克想法的启发:
const renameObjKey = ({oldObj, oldKey, newKey}) => {
const keys = Object.keys(oldObj);
const newObj = keys.reduce((acc, val)=>{
if(val === oldKey){
acc[newKey] = oldObj[oldKey];
}
else {
acc[val] = oldObj[val];
}
return acc;
}, {});
return newObj;
};
Run Code Online (Sandbox Code Playgroud)
您可能需要考虑将键数组减少到一个新对象中。为此,您还需要知道哪个键更改为什么。
之后,您将获得一个具有之前顺序的对象,并且可能更改后的键仍位于同一位置
像这样的东西可能会起作用(未经测试)
const changedKeyMap = {"previousKey": "newKey"};
const keys = Object.keys(this.state.obj);
const content = e.target.value;
const result = keys.reduce((acc, val) => {
// modify key, if necessary
if (!!changedKeyMap[val]) {
val = changedKeyMap[val];
}
acc[val] = content;
// or acc[val] = this.state.obj[val] ?
return acc;
}, {});
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,您需要跟踪如何更改密钥 (changedKeyMap)。reduce 函数只是按正确的顺序迭代所有键并将它们添加到新创建的对象中。如果某个键被更改,您可以在changedKeyMap中检查它并替换它。它仍然会在正确的位置
| 归档时间: |
|
| 查看次数: |
3530 次 |
| 最近记录: |