从对象创建新的多维数组

时间:2013-01-29 18:48:32

标签: javascript arrays object

我从一个对象创建一个新数组。 我用for循环做这个。

for (var key in data["record"])
    {
        if (data["record"].hasOwnProperty(key))
        {   

            if (data["record"][key]["acquisition.method"] != undefined ) {
                newObject[key] = [];

                newObject[key]["acquisition.method"] = data["record"][key]["acquisition.method"][0];

                if (data["record"][key]["production.date.end"] != undefined ) { 
                    newObject[key]["production.date"] = data["record"][key]["production.date.end"][0];


                }
            }
        }
    }

数组在console.log中显示如下:

0: Array[0]
1: Array[0]
2: Array[0]
3: Array[0]
4: Array[0]
5: Array[0]

我想这样做:

record: Array[0]
record: Array[0]
record: Array[0]
record: Array[0]
record: Array[0]

我该怎么做?

添加了JSON

newObject = [
    "record": [
               "something": "value",
               "somethingelse": "value"
        ],
    "record": [
               "something": "value",
               "somethingelse": "value"
        ],
    "record": [
               "something": "value",
               "somethingelse": "value"
        ],
    "record": [
               "something": "value",
               "somethingelse": "value"
        ]
]

我唯一能做到的就是这样:

   newObject = [
        "0": [
                   "something": "value",
                   "somethingelse": "value"
            ],
        "1": [
                   "something": "value",
                   "somethingelse": "value"
            ],
        "2": [
                   "something": "value",
                   "somethingelse": "value"
            ],
        "3": [
                   "something": "value",
                   "somethingelse": "value"
            ]
    ]

我尝试过类似的东西,但我知道推送只适用于数组:

var newObject = {};
    var records ={};
    records["record"] = {};



    for (var key in data["record"])
    {
        if (data["record"].hasOwnProperty(key))
        {   

            if (data["record"][key]["acquisition.method"] != undefined ) {

                records["record"]["acquisition.method"] = data["record"][key]["acquisition.method"][0];

                if (data["record"][key]["production.date.end"] != undefined ) { 

                    records["record"]["production.date"] = data["record"][key]["production.date.end"][0];
                    newObject.push(records);
                }
            }
        }
    }

我现在尝试了什么:

var records =[];

var newObject1 = {};
var newObject2= {};



for (var key in data["record"])
{
    if (data["record"].hasOwnProperty(key))
    {   

        if (data["record"][key]["acquisition.method"] != undefined ) {

            newObject2["acquisition.method"] = data["record"][key]["acquisition.method"][0];

            if (data["record"][key]["production.date.end"] != undefined ) { 

                newObject2["production.date"] = data["record"][key]["production.date.end"][0];
                newObject1["record"] = newObject2;
            }
        }
    }
    records.push(newObject1);
}

1 个答案:

答案 0 :(得分:1)

如果我正确理解你的代码(并且我想我是:) :),你要做的就是使你可以用一个字符串访问数组中的每个记录(key )。这可以通过使用JSON实现。即使使用JSON,您仍然可以通过索引(您看到的整数键)访问数组中的元素。


更新 想想这样,你试图用一个键访问数组中的一堆对象。问题是,根据定义,密钥是指单个值。因此,您不能对多个对象使用相同的键。但是,您可以创建一个数组,键“记录”指的是将返回所有这些内部键值对的数组。

更新2 可以这样想:假设您使用的是原始数组(在您最初发布的代码中创建的数组)。现在假设您将该数组设置为名为var rec的变量的值。在控制台中查看变量rec的值时,您将看到在原始帖子上列出的确切输出(“0:Array [0],1:Array [1] .....” )。退后一步,我们知道变量rec指的是(即,它是一个包含所有这些数组的数组)(应该是这样)。现在,您要做的是:创建一个新对象obj1,并为其指定一个名为record的属性,并将该属性的值设置为您的变量rec。这意味着您有一个可以通过obj1访问您的数据的对象obj["record"]

请注意,这是一个概念性解决方案 - 而不是完整的解决方案。


如果您有任何疑问,请与我们联系。祝好运! :)