如何创建索引为字符串的对象数组?

时间:2020-03-23 05:24:47

标签: typescript

我想创建类似这样的东西

例如:

      let userTestStatus: { test: string, name: string }[] = [
      { "test": 't', "name": "Available" },
      { "test": 't1', "name": "Ready" },
      { "test": 't2', "name": "Started" }
  ];

  //I want to access the object like the example below
  console.log(userTestStatus['t'].name);


但是这样我就变得不确定了。我想访问这样的对象:userTestStatus ['t']。name

反正有这样做吗?

谢谢

2 个答案:

答案 0 :(得分:0)

您需要Lodash keyBy

const newObj = _.keyBy(userTestStatus, 'test')

现在您可以

console.log(newObj['t'].name);

答案 1 :(得分:0)

除非可以将对象转换为一个新对象(如Joseph Wang所建议的那样),否则您正在寻找的可能是一种为任何属性定义吸气剂的方法。

某些javascript实现曾经有实现此目的的方法,但是它们是非标准的,我相信当前已被删除。

我知道创建具有“计算属性”的对象的唯一方法可能是Proxy

但是,这也需要更多管道才能使其正常工作。

我的建议是尝试找出为什么需要此功能,并查看是否还有其他更简单的方法来实现此目的。

最简单的确实是仅转换此对象。通过这种转换,您可以完全按照示例中的方式访问对象:

const newObj = Object.fromEntries(
  userTestStatus.map( item => [item.key, item] )
);