JavaScript:用数组替换对象键

disbfnqx  于 2023-05-05  发布在  Java
关注(0)|答案(7)|浏览(260)

我是JS的新手,正在尝试这些东西。我有以下目标:

var data = {'name': 'john', 'old': 18, 'place': 'USA'}

我如何用下面的数组切换这个对象的键?

var array = ['First Name', 'age', 'country']

查看以下内容:

{'First Name': 'john', 'age': 18, 'country': 'USA'}
k3bvogb1

k3bvogb11#

重命名对象的键的唯一方法是将旧键的值赋给新键,然后删除旧键

Object[ new_key ] = Object[ old_key ];
delete Object[ old_key ];

另一种方法是创建一个全新的对象(使用新键),将值分配给新键,然后删除旧对象。

pcww981p

pcww981p2#

var array = ['First Name', 'age', 'country'];

var data = {'name': 'john', 'old': 18, 'place': 'USA'};

var keys = Object.keys(data);
var newData = {};

for (var a in array) {
   //using new obj
   newData[array[a]] = data[keys[a]];

   //editing same obj
   data[array[a]] = data[keys[a]];
   delete data[keys[a]];
}

console.log(data);
console.log(newData);
var array = ['First Name', 'age', 'country'];

var list = [
    { 'name': 'john 1', 'old': 18, 'place': 'USA' },
    { 'name': 'john 2', 'old': 19, 'place': 'USB' },
    { 'name': 'john 3', 'old': 20, 'place': 'USC' },
];

var newList = [];

for (var item in list) {
  var newData = {};
  
  for (var a in array) {
     newData[array[a]] = list[item][Object.keys(list[item])[a]];
  }
  
  newList.push(newData);
}

console.log(newList);
2ul0zpep

2ul0zpep3#

您可以使用Object.assign()Object.entries().map()、扩展元素和计算属性将属性名称分配给新对象,该新对象的值为属性的当前索引、迭代内的值、将原始对象的标识符设置为Object.assign()调用的结果

let array = ['First Name', 'age', 'country']
let data = {'name': 'john', 'old': 18, 'place': 'USA'}

data = Object.assign({}, ...Object.entries(data)
         .map(([, prop], index) => ({[array[index]]: prop})));
            
console.log(data);
svgewumm

svgewumm4#

而不是switching对象键;这是不可能做到的,你必须删除键并添加新的键,你可以简单地用所需的键创建一个新对象:

var data2 = {};
data2['First Name'] = data.name;
data2.age = data.old;
data2country = data.place;
cyej8jka

cyej8jka5#

您可以使用具有替换键的对象并迭代它以更改键。

var data = { name: 'john', old: 18, place: 'USA' },
    newKeys = { name: 'First Name', old: 'age', place: 'country' };
    
Object.keys(newKeys).forEach(function (k) {
    data[newKeys[k]] = data[k];
    delete data[k];
});

console.log(data);
qkf9rpyu

qkf9rpyu6#

var data = {'name': 'john', 'old': 18, 'place': 'USA'}
var ary = ['First Name', 'age', 'country']

// create key-value pairs array 
var obj_entries = Object.entries(data)

var new_data =ary.reduce((acc, value, idx)=>{
                            acc[value]=obj_entries[idx][1];
                            return acc;
                             }, {})
console.log(new_data)

也许是功能性的方法

kwvwclae

kwvwclae7#

如果对象的值包含任何其他对象,建议创建对象值的深层副本

let data = {'name': 'john', 'old': 18, 'place': 'USA'}
    let keys = ['firstName', 'age', 'country'] // 
    let values = Object.values(data)
    let newObject = {} 
    keys.forEach((element,index) => { newObject[element] = values[index] })
    console.log(newObject)

相关问题