Javascript 集合/数组中的复杂对象。创建一个简单的键索引方法

Javascript 集合/数组中的复杂对象。创建一个简单的键索引方法,javascript,arrays,oop,collections,data-management,Javascript,Arrays,Oop,Collections,Data Management,我已经创建了一个自定义对象,它的任务是提供有关它所持有的数据的更多信息 因此,除了数据,我还有一个对象,它是我“处理”的所有数据的基/“myObject”,它总是带有声明名称,例如名称,我还打算将它本身分类(这不是我的发明,这是.net c中名称空间的一种形式,我觉得在这里编程更舒服) 这就是原因,…所有处理的程序数据的公共属性/值的某种既定形式 问题是当它位于集合/序列/集合/数组中时 我希望能够对它进行索引(在c#中,我大量使用indexers和enum) 在那里我可以创建一个对象并通过它的

我已经创建了一个自定义对象,它的任务是提供有关它所持有的数据的更多信息

因此,除了数据,我还有一个对象,它是我“处理”的所有数据的基/“myObject”,它总是带有声明名称,例如名称,我还打算将它本身分类(这不是我的发明,这是.net c中名称空间的一种形式,我觉得在这里编程更舒服)

这就是原因,…所有处理的程序数据的公共属性/值的某种既定形式

问题是当它位于集合/序列/集合/数组中时 我希望能够对它进行索引(在
c#
中,我大量使用
indexer
s和enum) 在那里我可以创建一个对象并通过它的一个键访问它的数据

                      //pName        pVal (usually a data/json object could be anything)
var someRprop = Rprp("HomePhone" , { dtT: "string", dt: "0044-01...", cat "cusDat", division: "portal"; catId: 32}) 

function Rprp(parName, parVal) {
        var cretdprp = {
            pName:pPropName,
            pVal: pVal,
            pValAsint: parseInt(this.pVal)

        };
    return cretdprp;
}
现在,如果我需要创建一个按键索引的集合,我无法理解如何创建一个匹配的集合对象,以便能够通过属性名访问它

例如,在我创建的任何程序的主对象属性中,我都有一个,比如“数据类型”:

编辑添加了使用上下文

   TabularsWHRM: function () {
                            var rtWH = {
                                            DTNDataTypes: function () {

                                                    var rtarr = new Array();
                                                    rtarr =[ Rprp("DateTime", {dateTime: this.DbLengts.pVal.vals.NameShort}),Rprp("int32", {Int32 : this.DbLengts.pVal.vals.NameShort }), Rprp("bool", { Boolean : this.DbLengts.pVal.vals.NameShort }), Rprp("objct", { Object: undefined }), Rprp("csvString", { CsvString: this.DbLengts.pVal.vals.csvString }), Rprp("string", { String: this.DbLengts.pVal.vals.string }), Rprp("Json", { Json: undefined }), Rprp("FileObj", { File: this.DbLengts.pVal.vals.NameShort })];
                                                    var tk = rtarr["DateTime"];
                                                    console.log("MyNamedkey >" + key.pName + " has Length value " + rtarr[key].pVal);
                                                    for (var key in rtarr) {

                                                        console.log("key " + key.pName + " has value " + rtarr[key].pVal.dateTime);
                                                        if (key == this.DTNDataTypes.dateTime) {
                                                    //dateTime: "DateTime", int32: "Int32", bool : "Boolean", objct: "Object",csvString: "CsvString", string : "String", Json: "Json", aFileObj: "File"}
                                                        }
                                                }
                                                return rtarr;
                                            },
                                            DbLengts: Rprp ("DbLengts",
                                            {
                                                vals : {
                                                                        NameShort: 25,
                                                                        Name: 50, NameLong: 150,
                                                                        PathIO: 450, ShortDesc: 150, Desc: 450,
                                                                        CommentsL1: 1000, CommentsL2: 2000, Text: 4000
                                                                        ,generate: function (pDTNDataTypes){
                                                                        var s = pDTNDataTypes;
                                                                        var rtIval = -1;
                                                                            switch (s) {
                                                                                case this.names.nameShort : rtIval = this.NameShort;
                                                                                case this.names.name: rtIval = this.Name;
                                                                                case this.names.nameLong: rtIval = this.NameLong;
                                                                                case this.names.pathIO: rtIval = this.PathIO;
                                                                                case this.names.shortDesc: rtIval = this.ShortDesc;
                                                                                case this.names.desc: rtIval = this.Desc;
                                                                                case this.names.commentsL1: rtIval = this.CommentsL1;
                                                                                case this.names.commentsL2: rtIval = this.CommentsL2;
                                                                                case this.names.text: rtIval = this.Text;

                                                                                default: rtIval = 800;
                                                                                break;

                                                                            }
                                                                          return  parseInt(rtIval);
                                                                        }

                                                        },
                                                names : 
                                                { 
                                                  nameShort : "NameShort", name : "Name", nameLong : "NameLong", pathIO : "PathIO", shortDesc : "ShortDesc", desc : "Desc", commentsL1 : "CommentsL1", commentsL2 : "CommentsL2", text : "Text"
                                                }
                                            })



                            };
                        return rtWH;
       },

我不太清楚您到底需要什么,但是JavaScript内置的
Set
类不能满足您的需求有什么原因吗?听起来你只需要一个简单的键值对集合?@JCD你考虑过
Rprp(parName,parVal)
,函数如
ToInt()
,我的自定义对象是集合中的元素吗?我不明白这个问题,抱歉。@JCD我会添加我的try,这样会更容易,请尝试帮助。thanks@JCD我想现在更容易看到它所在的上下文,我试图通过它的名称访问元素,但是元素是
Rprop
而不是基本的js
{}
我对这里需要什么有点模糊,但是JavaScript内置的
Set
类不能满足您的需求有什么原因吗?听起来你只需要一个简单的键值对集合?@JCD你考虑过
Rprp(parName,parVal)
,函数如
ToInt()
,我的自定义对象是集合中的元素吗?我不明白这个问题,抱歉。@JCD我会添加我的try,这样会更容易,请尝试帮助。thanks@JCD我想现在更容易看到它所在的上下文,我试图通过它的名称访问元素,但元素是
Rprop
而不是基本的js
{}
   TabularsWHRM: function () {
                            var rtWH = {
                                            DTNDataTypes: function () {

                                                    var rtarr = new Array();
                                                    rtarr =[ Rprp("DateTime", {dateTime: this.DbLengts.pVal.vals.NameShort}),Rprp("int32", {Int32 : this.DbLengts.pVal.vals.NameShort }), Rprp("bool", { Boolean : this.DbLengts.pVal.vals.NameShort }), Rprp("objct", { Object: undefined }), Rprp("csvString", { CsvString: this.DbLengts.pVal.vals.csvString }), Rprp("string", { String: this.DbLengts.pVal.vals.string }), Rprp("Json", { Json: undefined }), Rprp("FileObj", { File: this.DbLengts.pVal.vals.NameShort })];
                                                    var tk = rtarr["DateTime"];
                                                    console.log("MyNamedkey >" + key.pName + " has Length value " + rtarr[key].pVal);
                                                    for (var key in rtarr) {

                                                        console.log("key " + key.pName + " has value " + rtarr[key].pVal.dateTime);
                                                        if (key == this.DTNDataTypes.dateTime) {
                                                    //dateTime: "DateTime", int32: "Int32", bool : "Boolean", objct: "Object",csvString: "CsvString", string : "String", Json: "Json", aFileObj: "File"}
                                                        }
                                                }
                                                return rtarr;
                                            },
                                            DbLengts: Rprp ("DbLengts",
                                            {
                                                vals : {
                                                                        NameShort: 25,
                                                                        Name: 50, NameLong: 150,
                                                                        PathIO: 450, ShortDesc: 150, Desc: 450,
                                                                        CommentsL1: 1000, CommentsL2: 2000, Text: 4000
                                                                        ,generate: function (pDTNDataTypes){
                                                                        var s = pDTNDataTypes;
                                                                        var rtIval = -1;
                                                                            switch (s) {
                                                                                case this.names.nameShort : rtIval = this.NameShort;
                                                                                case this.names.name: rtIval = this.Name;
                                                                                case this.names.nameLong: rtIval = this.NameLong;
                                                                                case this.names.pathIO: rtIval = this.PathIO;
                                                                                case this.names.shortDesc: rtIval = this.ShortDesc;
                                                                                case this.names.desc: rtIval = this.Desc;
                                                                                case this.names.commentsL1: rtIval = this.CommentsL1;
                                                                                case this.names.commentsL2: rtIval = this.CommentsL2;
                                                                                case this.names.text: rtIval = this.Text;

                                                                                default: rtIval = 800;
                                                                                break;

                                                                            }
                                                                          return  parseInt(rtIval);
                                                                        }

                                                        },
                                                names : 
                                                { 
                                                  nameShort : "NameShort", name : "Name", nameLong : "NameLong", pathIO : "PathIO", shortDesc : "ShortDesc", desc : "Desc", commentsL1 : "CommentsL1", commentsL2 : "CommentsL2", text : "Text"
                                                }
                                            })



                            };
                        return rtWH;
       },