更改对象数组中的键名?

IT技术 javascript
2021-02-08 10:18:58

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

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

我怎样才能改变每一个key1stroke以便我得到:

var arrayObj = [{stroke:'value1', key2:'value2'},{stroke:'value1', key2:'value2'}];
6个回答

在最近的 JavaScript(和 TypeScript)中,使用带有 rest 语法展开语法数组的map解构来替换对象数组中的一个关键字符串。

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

console.log(newArrayOfObj);

如何让“stroke”动态传递给map函数?
2021-03-22 10:18:58
@Prashant,好问题(如何动态传递“中风”)!下面的代码对你有用吗?const newKey = 'stroke'; const newArrayOfObj = arrayOfObj.map(({ key1, ...rest }) => ({ [newKey]: key1, ...rest }));
2021-03-24 10:18:58
Spread 是可选的,如果您想将旧值保留在数组中,它就在那里。不错的答案,尽管如此,仍然非常简洁和强大。
2021-03-26 10:18:58
请注意,这不会取代任何东西。它使用新的属性名称创建一个新数组。
2021-03-31 10:18:58
是否可以在嵌套属性上使用它,例如 const arrayOfObj = [{attributes: { key1: 'value1', key2: 'value2' }}, {attributes: { key1: 'value1', key2: 'value2' }} ];?
2021-04-01 10:18:58
var i;
for(i = 0; i < arrayObj.length; i++){
    arrayObj[i].stroke = arrayObj[i]['key1'];
    delete arrayObj[i].key1;
}
你可以在这里看到它:jsfiddle.net/Paulpro/XVxvy/2它警告“未定义”,然后是“value1”
2021-03-12 10:18:58
它删除了钥匙,我该怎么办:(
2021-03-17 10:18:58
感谢您的解决方案,但如果对象带有动态键呢?如:var arrayObj = [{abcKey,'value1', acdKey:'value2',defKey:'value3', cfgKey:'value4'}];
2021-04-08 10:18:58

ES6 map()方法:

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

arrayObj = arrayObj.map(item => {
      return {
        stroke: item.key1,
        key2: item.key2
      };
    });
但是您需要知道对象中的所有键,并将它们中的每一个都写入返回的对象中。
2021-03-14 10:18:58
你不需要知道所有的键,你可以像这样使用扩展运算符: var arrayObj = [{key1:'value1', key2:'value2'},{key1:'value1', key2:'value2'} ]; arrayObj = arrayObj.map(item => { return { ...item, key2: item.key2 }; });
2021-03-31 10:18:58

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

for (var i = 0; i < arrayObj.length; i++) {
  arrayObj[i].stroke = arrayObj[i].key1;
  delete arrayObj[i].key1;
}
是的,它是 Javascript 语言的一部分。
2021-03-21 10:18:58
delete所有浏览器版本的支持?
2021-03-28 10:18:58
好吧,出于某种原因,我认为某些版本的 IE 或其他东西不支持它。
2021-04-11 10:18:58

ES6 只需要一行代码

尝试以下代码:

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