如何在Type脚本中迭代“ any”对象数组并访问其属性

时间:2019-07-26 16:31:25

标签: typescript

我有这个JSON数据对象:

    var dataObjects = [
         {
          "Name": "Date & Time",
          "Type": "Date",
          "Value": "2019-12-11"
          },
          {
          "Name": "Activity",
          "Type": "String",
          "Value": "ADD"
          }
      ]

我想从这个对象中构建一个新的JSON数据数组对象,除了新对象的日期格式为“ 2019-12-11”到“ 2019年12月11日”。

在谷歌搜索后,这是我的尝试,但是我遇到很多语法错误。

请原谅我缺乏对Typescript和Javascript的了解,这就是为什么我寻求帮助,因为一些简单的事情仍然给我带来很多困难。

        public FunctionA(dataObjects: any[]): object 
        {
           let returnObj: any = {}
           let returnObjArray: any = [];

           for(let obj in dataObjects){

             var dateValue = obj.Date;

             if(obj.Type == "Date"){
               dateValue = obj.Date.Format()
             }
             returnObj = {"Name", obj.Name, "Type": obj.Type, "Value": dateValue };
             returnObjArray.push(returnObj);
           }

           return returnObjArray;
        }

我有点理解我的错误是,在使用其属性之前,我必须以某种方式指定此“ any”数组是什么。但是,我尝试在下面声明它,但仍然有错误:

    dataObjects: Array[{ Name: string, Type: string, Value: string }]

3 个答案:

答案 0 :(得分:1)

语法是这样的:

Array<{ Name: string, Type: string, Value: string }>

或者这个:

{ Name: string, Type: string, Value: string }[]

但更好的是给它起一个名字:

type MyObject = {
 Name: string,
 Type: string,
 Value: string 
}

然后在各处使用MyObject[]

答案 1 :(得分:1)

这是实现目标的方法:

minishift stop && minishift start

var dataObjects = [ { "Name": "Date & Time", "Type": "Date", "Value": "2019-12-11" }, { "Name": "Activity", "Type": "String", "Value": "ADD" } ] type dataType = {Name: string, Type: string, Value: string}; function A(dataObjects: dataType[]): dataType[] { let returnObjArray: dataType[] = []; dataObjects.forEach((obj:dataType) => { if(obj.Type === "Date"){ obj.Value = moment(obj.Value).toString("MMM dd, yyyy"); } returnObjArray.push(obj); }); return returnObjArray; } 是您可以将旧日期字符串转换为所需格式(使用moment包)的地方。

答案 2 :(得分:1)

我认为最好的方法是创建自己的DataObject接口并使用map函数创建新数组。

interface DataObject {
  name: string;
  type: string;
  value: string;
}

var dataObjects: DataObject[] = [
  {
   "name": "Date & Time",
   "type": "Date",
   "value": "2019-12-11"
   },
   {
   "name": "Activity",
   "type": "String",
   "value": "ADD"
   }
]

function convertDate(date: string): string {
  // Your conversion code here.
  return date;
}

function convertDataObjects(dataObjects: DataObject[]): DataObject[] {
  return dataObjects.map(obj => {
    return {name: obj.name, type: obj.type, value: convertDate(obj.value)};
  });
}

console.log(convertDataObjects(dataObjects));