如何在 TypeScript 中将枚举转换为键值数组?

6
var enums = {
  '1': 'HELLO',
  '2' : 'BYE',
  '3' : 'TATA'
  };

我希望能够将其转换为以下的数组形式:
[
  {
    number:'1',
    word:'HELLO'
  },
  {
    number:'2',
    word:'BYE'
  },
  {
    number:'3',
    word:'TATA'
  }
]

我看到的所有解决方案都形成一个键或值的数组。


4
{'1', 'HELLO'}是什么?它既不是有效的JavaScript代码,也不是有效的TypeScript代码。 - jcalz
你为什么期望 {number:'2', word: 'TATA'} - jcalz
@jcalz 显然是个打字错误。 - WilliamNHarvey
6个回答

12
你可以使用简写属性来映射条目。

var enums = { 1: 'HELLO', 2: 'BYE', 3: 'TATA' },
    objects = Object.entries(enums).map(([number, word]) => ({ number, word }));

console.log(objects);
.as-console-wrapper { max-height: 100% !important; top: 0; }


7

您可以使用Object.entries map它以达到所需的格式。

var enums = {
  '1': 'HELLO',
  '2' : 'BYE',
  '3' : 'TATA'
  };
  
let op = Object.entries(enums).map(([key, value]) => ({ number:key, word:value }))

console.log(op)


1
你如何知道这是预期的输出? - brk
@brk 这在问题中已经指定了,我想要将它转换为一个看起来像这样的数组。 - Code Maniac
谢谢你的回答。 这给了我输出 [{"1": "HELLO"}, {"2": "BYE"}, {"3": "TATA"}]我需要它变成[{"1","HELLO"}, {"2","BYE"}, {"3","TATA"}],而不是冒号。 - user7434041
@user7434041,您能描述一下您期望的数据类型吗?{ "1","HELLO" }不是有效的JavaScript或TypeScript语法。它看起来几乎像是Python元组。 - WilliamNHarvey
在对象中,您需要键/值对,格式为--> key:value - Code Maniac
抱歉,我的错,我编辑了问题中的期望输出。 - user7434041

3
另一个选择是使用 for...in 循环来遍历 enums 的键并构造所需的对象数组。

var enums = {
  '1': 'HELLO',
  '2' : 'BYE',
  '3' : 'TATA'
};

let res = [];

for (key in enums)
{
    res.push({number: key, word: enums[key]});    
}

console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}


1
你可以使用 Object.keys 和 map。

var obj = {
  '1': 'HELLO',
  '2' : 'BYE',
  '3' : 'TATA'
};


const result = Object.keys(obj).map(el => {
  return {
    number: el,
    word: obj[el]
  }
})

console.log(result)


0
你可以使用Object.entries()和foreach将其推入数组中,如下所示。

var enums = {
    '1': 'HELLO',
    '2' : 'BYE',
    '3' : 'TATA'
    };

var enumArray = []
Object.entries(enums).forEach(([key, value]) => enumArray.push({number : key, word : value}));

console.log(enumArray);


这将为您提供所有键和值组合,导致数组对象数量错误。例如:https://www.typescriptlang.org/play?#code/KYOwrgtgBAMgggZQCoH0ByBVAsgIQKIBKKA8gGIpICSWeUA3gFBTOyKoBsADCgCJwCaCKAF4oXADRMW8ZCgDM3PoJFQFklq1kBGAKy8BQ0bvXS2KLSgDqePAGkVAdhPMZqC0pVbJAXwbEARgBWwADGAC4AdKBhAE4AlsAAzgAUrujY+ERkFNR4AJQREACGAA7JyQDaANbAAJ7iUABuRQA2YMAAunkiAHxQyXRxACYAXFA19U2t7WPNbcDeeXkMQA - hafiz ali

0
需要创建一个 Map 类型的对象,然后使用 get 方法获取值,例如 outData.get("1")。
var obj = {
    '1': 'HELLO',
    '2': 'BYE',
    '3': 'TATA'
};
var outData = new Map();
Object.keys(obj).forEach(function (e) {
    outData.set(e, obj[e])
});

要获取数据,请使用outData.get("key")

现在输出的数据将会是-

Map(3) {"1" => "HELLO", "2" => "BYE", "3" => "TATA"}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接