javascript - 映射具有未知长度和未知键名称的对象数组

标签 javascript arrays typescript

以下是一些对象数组:

1. [{id:'1', code:'somecode', desc:'this is the description'}, {...}, {...}]

2. [{fname:'name', lname:'last name', address:'my address', email:'my@email.com'}, {...}, {...}]

我需要做的是创建一个函数,在其中传递一个数组并将它们的对象键映射到通用键,这样它们就变成这样:

1. [{key1:'1', key2:'somecode', key3:'this is the description'}, {...}, {...}]

2. [{key1:'name', key2:'last name', key3:'my address', key4:'my@email.com'}, {...}, {...}]

当我这样做时

let keys: string[] = Object.keys(this.options[0])
this.replacedItems = this.options.map(item => {
  return{
    key1: item[keys[0]],
    key2: item[keys[1]],
    key3: item[keys[2]],
  }
});

它工作正常,但由于对象的属性编号不固定,我尝试了这个

let keys: string[] = Object.keys(this.options[0])
this.replacedItems = this.options.map(item => {
  let i=0;
  keys.forEach(key=>{
    let newKey = 'key'+i;
    i++
    return { newKey: item[key] }
  });
}); 

它返回一个未定义的数组... 我做错了什么?

最佳答案

采用.map的第二个参数来获取您正在迭代的当前索引,并将其与'key'连接起来。您还可以使用 Object.values 而不是 Object.keys 来立即获取值(因为您实际上并未使用原始键):

const options = [{id:'1', code:'somecode', desc:'this is the description'}];
const replacedItems = options.map(obj => Object.fromEntries(
  Object.values(obj).map((val, i) => ['key' + (i + 1), val])
));
console.log(replacedItems);

关于javascript - 映射具有未知长度和未知键名称的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60031502/

相关文章:

javascript - Jquery 事件和对象?

javascript - 使用 javascript 循环访问 ASP.NET 单选按钮列表以获取选定的值和文本

arrays - Numpy.count_nonzero 在 64 位 Windows 平台上崩溃

javascript - Jquery POST 不填充数组

arrays - typescript :有没有一种简单的方法可以将一种类型的对象数组转换为另一种类型

javascript - 在 Firefox 和 IE 中下载文件

javascript - jQuery:追加到文本区域内段落的 html 的最佳方式

java - 如何让代码在递归后只运行一次?

css - styleUrls 未在 angular2 ChildComponent (RC5) 中加载

typescript - 在 Typescript 中,如何使用所述类型的文字类型属性从联合中选择类型?