我的javascript对象如下所示:
const someObj = {
arr1: ["str1", "str2"],
arr2: ["str3", "str4"]
}在尝试重命名密钥(例如arr1)时,我最终删除了现有的密钥,并使用原始值编写了一个新的密钥。obj 的顺序改变了。
someObj = {
arr2: ["str3", "str4"],
renamedarr1: ["str1", "str2"]
}如何在保留密钥order的同时重命名密钥
发布于 2018-01-03 17:21:34
您可能需要考虑将键数组缩减为新对象。要做到这一点,您还需要知道哪个键更改为什么。
在此之后,您有一个具有以前顺序的对象,并且可能更改的键仍然处于相同的位置。
像这样的东西可能有用(没有测试)
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;
}, {});正如您所看到的,您需要跟踪如何更改密钥(changedKeyMap)。还原函数只按正确的顺序遍历所有键,并将它们添加到新创建的对象中。如果一个键被更改,您可以在changedKeyMap中检查并替换它。它仍将处于正确的位置
发布于 2018-01-05 09:43:34
最后,它是用的方式而不是反应的方式解决的。
如果有人会寻找类似的解决方案,我会张贴我最后使用的代码。灵感来源于Luke's的想法:
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;
};https://stackoverflow.com/questions/48082071
复制相似问题