给定一个具有动态属性(ID除外)的对象数组,用map中的属性键替换属性键的最佳方法是什么?
// For example, array of objects:
var records = [
{"Id": "0035w000036m j7oAAA", "Business Phone": "(212) 842-5501"},
{"Id": "0035w000036mj7oXXX", "Business Phone": "(212) 842-7777"}
];
// Map to pull replacement property from:
var colHeaderToFieldApiName = {"Business Phone": "Phone"};
// Desired output:
var result = [
{"Id": "0035w000036mj7oAAA", "Phone": "(212) 842-5501"},
{"Id": "0035w000036mj7oXXX", "Phone": "(212) 842-7777"}
];
这是我目前所知道的。它有效,但只是想知道是否有更好的方法。
records.forEach (function (obj) {
for (const prop in obi) {
if (Object.prototype.hasOwnProperty.call(obj, prop)) {
const fieldApiName = colHeaderToFieldApiName [prop];
if (fieldApiName) {
obji[fieldApiName] = obj[prop];
delete obi[prop];
}
}
}
});
2条答案
按热度按时间33qvvth11#
在下面的代码片段中,
newKeys
中包含的所有键将替换输入数组中给定的键:密钥替换基于
newKeys
对象:只有在该对象中定义的键将被替换为它们的新名称。所有其他键将保持不变。nhhxz33t2#
我过去就是这样做的。
这不是最快的实现,除非你谈论的是成千上万的键重Map,否则这并不重要。
对于一些开发人员来说,这可能是也可能不是最明确的方法,但对我来说肯定是,所以让我分享一下。
它使用:
map
遍历你的对象列表应用这个函数。这就是:
使用方法:
旁注:
o.hasOwnProperty(k)
,以防你不想在密钥包含检查上使用原型链;replacekeys = ([km, o]) => ...
,然后像records.map(o => replacekeys(colHeaderToFieldApiName, o))
一样使用它