我有一個這樣的物件:
NewObjName: Object { OLDCOLUMNNAME1: "NEWCOLUMN_NAME1", OLDCOLUMNNAME2: "NEWCOLUMN_NAME2", OLDCOLUMNNAME3: "NEWCOLUMN_NAME3"}
然后我有一個這樣的物件陣列:
array: [
1: Object { OLDCOLUMNNAME1: "VALUE", OLDCOLUMNNAME2: "VALUE", OLDCOLUMNNAME3: "VALUE"}
2: Object { OLDCOLUMNNAME1: "VALUE", OLDCOLUMNNAME2: "VALUE", OLDCOLUMNNAME3: "VALUE"}
3: Object { OLDCOLUMNNAME1: "VALUE", OLDCOLUMNNAME2: "VALUE", OLDCOLUMNNAME3: "VALUE"}
]
在這兩個物件中,我都有公共鍵 = OLDCOLUMNNAME
我如何將鍵(OLDCOLUMNNAME)從第一個物件(NewObjName)更改為 NEWCOLUMN_NAME
我需要這樣的東西:
array: [
1: Object { NEWCOLUMN_NAME1: "VALUE", NEWCOLUMN_NAME2: "VALUE", NEWCOLUMN_NAME3: "VALUE"}
2: Object { NEWCOLUMN_NAME1: "VALUE", NEWCOLUMN_NAME2: "VALUE", NEWCOLUMN_NAME3: "VALUE"}
3: Object { NEWCOLUMN_NAME1: "VALUE", NEWCOLUMN_NAME2: "VALUE", NEWCOLUMN_NAME3: "VALUE"}
]
我只是試著做這個:
const transformed = array.map(x => {
// console.log(x); // loop through array with objects
Object.keys(x).map(key1 => {
// console.log(key1); // get OLDCOLUMNNAME
Object.keys(NewObjName).map(key => {
// console.log(key); // get OLDCOLUMNNAME from NewObjName
// console.log(NewObjName[key]) // NEWCOLUMN_NAME
if (key1 === key) {
//if true i just try to set into OLDCOLUMNNAME to NEWCOLUMN_NAME
key1 = NewObjName[key]
delete NewObjName[key]
}
})
})
})
由于 (console.log(transformed)) - 我得到未定義
uj5u.com熱心網友回復:
您可以對我們翻譯的物件使用reduce和 forEach
const transformed = array.reduce((acc, cur) => {
const obj = {}
Object.entries(cur).forEach(([key, val]) => { // take each item
obj[newObjName[key]] = val; // translate the key from newObjName lookup table
})
acc.push(obj)
return acc;
}, [])
console.log(transformed)
<script>
const newObjName = {
OLDCOLUMNNAME1: "NEWCOLUMN_NAME1",
OLDCOLUMNNAME2: "NEWCOLUMN_NAME2",
OLDCOLUMNNAME3: "NEWCOLUMN_NAME3"
}
const array = [{
OLDCOLUMNNAME1: "VALUE1",
OLDCOLUMNNAME2: "VALUE2",
OLDCOLUMNNAME3: "VALUE3"
},
{
OLDCOLUMNNAME1: "VALUE11",
OLDCOLUMNNAME2: "VALUE22",
OLDCOLUMNNAME3: "VALUE33"
},
{
OLDCOLUMNNAME1: "VALUE111",
OLDCOLUMNNAME2: "VALUE222",
OLDCOLUMNNAME3: "VALUE333"
}
]
</script>
uj5u.com熱心網友回復:
作為通用解決方案,這可能是我解決它的方式:
const arr = [
{ OLDCOLUMNNAME1: 'VALUE', OLDCOLUMNNAME2: 'VALUE', OLDCOLUMNNAME3: 'VALUE' },
{ OLDCOLUMNNAME1: 'VALUE', OLDCOLUMNNAME2: 'VALUE', OLDCOLUMNNAME3: 'VALUE' },
{ OLDCOLUMNNAME1: 'VALUE', OLDCOLUMNNAME2: 'VALUE', OLDCOLUMNNAME3: 'VALUE' },
];
// define my map: what I what my old column name is and what I what I want my new column name to be
const map = {
OLDCOLUMNNAME1: 'NEWCOLUMN_NAME1',
OLDCOLUMNNAME2: 'NEWCOLUMN_NAME2',
OLDCOLUMNNAME3: 'NEWCOLUMN_NAME3'
};
//function to replace the old column name, with the new column name as defined in the map
const replaceOldColumnNames = (obj, map) => Object.keys(obj)
.reduce((r, c) => Object.assign(r, { [map[c]]: obj[c] }), {});
//iterate over the arr mapping out the old column names to the new ones using the above function
const newArr = arr.map(o => replaceOldColumnNames(o, map));
console.log(newArr)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/413796.html
標籤:
