更改对象数组中的键名?

时间:2011-07-24 20:53:07

标签: javascript

如何更改对象数组中的键名?

var arrayObj = [{key1:'value1', key2:'value2'},{key1:'value1', key2:'value2'}];

如何将每个key1更改为stroke,以便我获得:

var arrayObj = [{stroke:'value1', key2:'value2'},{stroke:'value1', key2:'value2'}];

11 个答案:

答案 0 :(得分:31)

var i;
for(i = 0; i < arrayObj.length; i++){
    arrayObj[i].stroke = arrayObj[i]['key1'];
    delete arrayObj[i].key1;
}

答案 1 :(得分:14)

您无法更改属性名称,必须使用新名称添加值并删除旧属性:

for (var i = 0; i < arrayObj.length; i++) {
  arrayObj[i].stroke = arrayObj[i].key1;
  delete arrayObj[i].key1;
}

答案 2 :(得分:11)

在最近的JavaScript(和TypeScript)中,使用destructuring with rest patternspreadarray map替换对象数组中的一个键字符串。

const arrayOfObj = [{key1:'value1', key2:'value2'},{key1:'value1', key2:'value2'}];
const newArrayOfObj = arrayOfObj.map(({ key1: stroke, ...rest }) => ({ stroke, ...rest }));
// [{stroke:'value1', key2:'value2'},{stroke:'value1', key2:'value2'}]

答案 3 :(得分:3)

function changeKey(originalKey, newKey, arr)
{
  var newArr = [];
  for(var i = 0; i < arr.length; i++)
  {
    var obj = arr[i];
    obj[newKey] = obj[originalKey];
    delete(obj[originalKey]);
    newArr.push(obj);
  }
  return newArr;
}

答案 4 :(得分:3)

您不会更改密钥名称。您可以指定新的密钥名称/值,然后根据需要删除以前的密钥。在您的示例中:

var arrayObj = [{key1,'value1', key2:'value2'},{key1,'value1', key2:'value2'}];
var o = arrayObj[0];   // get first object
var val = o.key1;      // get current value
o.stroke = val;        // assign to new key
delete o.key1;         // remove previous key

如果要对主数组中的所有对象执行此操作,则只需将其放在循环中,以遍历数组的内容。为了记录正在发生的事情,我已经在这里放置了比必要更多的中间任务。

或循环中的缩短版本:

for (var i = 0; i < arrayObj.length; i++) {
    var o = arrayObj[i];
    o.stroke = o.key1;
    delete o.key1;
}

答案 5 :(得分:3)

ES6 map()方法:

var arrayObj = [{key1:'value1', key2:'value2'},{key1:'value1', key2:'value2'}];

arrayObj = arrayObj.map(item => {
      return {
        value: item.key1,
        key2: item.key2
      };
    });

答案 6 :(得分:2)

ES6仅需要一行代码

尝试以下代码:

arrayObj.map(({ stroke, key2 }) => ({ yourNewKey: stroke, yourNewKey2: key2 }));

答案 7 :(得分:1)


const company =  [{ id:"1", name:"somename"},{ id:"1", name:"somename"}]

company.map(({ id, name }) => ({ companyId: id, companyName: name }));

// output
//[{ companyId:"1", companyName:"somename"},{ companyId:"1", //companyName:"somename"}]

答案 8 :(得分:0)

简单的方法是使用displayMovieArray.append(contentsOf: parentMovieArray.filter { $0.movieType.contains(self.day!) }) 函数。首先将key1内容复制到笔画中,然后将其删除key1

forEach()

答案 9 :(得分:0)

纯JavaScript

var array=[{oldkey:'oldkeyvalue',oldkey2:'oldkey2'}]
var result=array.map(({ oldkey: newkey, ...rest }) => ({ newkey, ...rest }));
console.log(result)

lodash或下划线js

//Lodash/underscore.js
_.map(array,(({ oldkey: newkey, ...rest }))=>({ oldkey: newkey, ...rest }))

上述技术无法设置字符串名称

例如:全名或姓氏

错误的方式:

name:full name

正确的方法

name:full_name

您可以使用map以相同的方式实现字符串对象

array.map((x)=>{
var y={};
//also use spread operator if necessary but key want to remove manually

y['full name']=x['name'];
return y;
})

答案 10 :(得分:-1)

您可以使用不可变的方式来更改对象。 您还可以向对象添加新的键值对

let arrayOfObj = [{id:"0",name:'myName'},{id:"2",name:'myNewName'}]
const newArr = arrayOfObj.map(item => ({ ...item, id : Number(item.id),someRandomKey:'RandomValue' }))
console.log(newArr)