0

我正在从一个对象创建一个新数组。我用一个 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"
            ]
    ]

我尝试过这样的事情,但我知道 push 仅适用于数组:

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);
}
4

1 回答 1

1

如果我正确理解了您的代码(并且我想认为我是:)),那么您要做的是使您可以使用字符串(键)访问数组中的每条记录。这可以通过使用 JSON 来实现。即使使用 JSON,您仍然应该能够通过索引(您看到的整数键)访问数组中的元素。


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

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

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


如果您有任何问题,请告诉我。祝你好运!:)

于 2013-01-29T19:16:19.387 回答