重命名对象中的键

Joh*_*per 14 javascript

var addObjectResponse = [{
    'SPO2': '222.00000',
    'VitalGroupID': 1152,
    'Temperature': 36.6666666666667,
    'DateTimeTaken': '/Date(1301494335000-0400)/',
    'UserID': 1,
    'Height': 182.88,
    'UserName': 'Admin',
    'BloodPressureDiastolic': 80,
    'Weight': 100909.090909091,
    'TemperatureMethod': 'Oral',
    'Resprate': 111,
    'HeartRate': 111,
    'BloodPressurePosition': 'Standing',
    'VitalSite': 'Popliteal',
    'VitalID': 1135,
    'Laterality': 'Right',
    'HeartRateRegularity': 'Regular',
    'HeadCircumference': '',
    'BloodPressureSystolic': 120,
    'CuffSize': 'XL',
}];
Run Code Online (Sandbox Code Playgroud)

如何重命名键...像SPO2一样进入O2 ......数组中有这么多对象......

Ili*_*oly 18

也许是这样的?

var i, len = addObjectResponse.length;
for (i = 0; i < len; i++) {
    addObjectResponse[i]['O2'] = addObjectResponse[i]['SPO2'];
    delete addObjectResponse[i]['SPO2'];
}
Run Code Online (Sandbox Code Playgroud)

要么

addObjectResponse = addObjectResponse.map(function (obj) {
    obj['O2'] = obj['SP02'];
    delete obj['S02'];
    return obj;
});
Run Code Online (Sandbox Code Playgroud)

要么

for (let obj of addObjectResponse) {
    obj['O2'] = obj['SP02'];
    delete obj['S02'];
}
Run Code Online (Sandbox Code Playgroud)

要么

function renameProperty(obj, fromKey, toKey) {
    obj[toKey] = obj[fromKey];
    delete obj[fromKey];
}

addObjectResponse.forEach(obj => renameProperty(obj, 'SP02', 'O2'));
Run Code Online (Sandbox Code Playgroud)


Jon*_*Jon 12

您无法直接重命名属性.但是,您可以设置新属性并取消设置旧属性,间接"重命名"它们:

function rename(obj, oldName, newName) {
    if(!obj.hasOwnProperty(oldName)) {
        return false;
    }

    obj[newName] = obj[oldName];
    delete obj[oldName];
    return true;
}
Run Code Online (Sandbox Code Playgroud)


rsp*_*rsp 6

在vanilla JS one-liner中不可变的键重命名

这可能不是重命名密钥的最有效方法,但我认为它在某些方面很有趣:

  1. 它不会改变原始对象
  2. 它需要一行vanilla JavaScript
  3. 它演示了现代语法的使用

如果您仍需要使用原始阵列,有时可能需要No.1.考虑到这里的一些示例具有超过30行代码的事实,No.2可能是有趣的.考虑到它们的强大程度和广泛的支持程度,No.3可能用于教育目的,以说明语言的某些特征,这些特征并非经常使用.

如果您创建这样的映射对象:

const m = { SPO2: 'O2' };
Run Code Online (Sandbox Code Playgroud)

那么你将来可以轻松添加更多密钥以重命名.

现在,可以在vanilla JS中创建一个单行程序:

const t = o => Object.assign(...Object.keys(o).map(k => ({ [m[k] || k]: o[k] })));
Run Code Online (Sandbox Code Playgroud)

假设你有一个对象数组:

const a = [{
  'SPO2': '222.00000',
  'VitalGroupID': 1152,
}, {
  'SPO2': '333.00000',
  'VitalGroupID': 1153,
}, {
  'SPO2': '444.00000',
  'VitalGroupID': 1154,
}];
Run Code Online (Sandbox Code Playgroud)

你可以得到一个a.map(t)像这样的新数组:

console.log('Before:', a);
console.log('After:', a.map(t));
Run Code Online (Sandbox Code Playgroud)

您的原始对象在原始数组中仍然完好无损.