推到阵列

时间:2016-01-18 18:29:34

标签: javascript arrays array-push

我需要遍历数组和数组中具有额外值的每个数组,将它们作为单独的项目推送到其父数组。我希望这是有道理的。

这是我的初始数组的结构:

{type:
    [ 0:
        value: "tomato"
    ],
    [ 1:
        {value: "apple",
        [ extras:
           [ 0: { value: "green" } ],
           [ 1: { value: "red" } ]
        ]
    ],
    [ 2:
        value: "pineapple"
    ]
}

结果如下:

[type:
    [ 0:
        tomato
    ],
    [ 1:
        apple,
        green,
        red
    ],
    [ 2:
        pineapple
    ]
]

我尝试过但失败了: (我也评论了我在右侧的错误)

var response = /* json of first codeblock in question is response from ajax */;

var items = JSON.parse( response );

var type = Object.keys( items )[0];

var myArray = [] 
var count = items[type].lenght;

//Loop through main items in "type"
for( i = 0; i < count; i++ ) {

    var value = items[type][i][value]; 
    myArray[type][i] = [value];  //Uncaught TypeError: Cannot set property '0' of undefined 

    if( items[type][i][extras] ) {

        var extracount = items[type][i][extras].lenght;

        //Loop through extras
        for( k = 0; k < extracount; k++ ) {

            var extra = items[type][i][extras][k][value];
            myArray[type][i].push( extra );
        }
    }     
}

我的主要问题是我不明白,这似乎也是我的例子中的问题:

如果我声明一个空数组,我该怎么做:

  • 将项目推送到该数组,并在该项目周围声明一个新数组?
  • 将另一个项目推送到围绕第一个项目创建的数组?

2 个答案:

答案 0 :(得分:1)

这就是我相信你想要的。以下代码可能不正确,因为我接近我认为您的items对象包含的内容。

var items = {
    type: [
        {
            value: "tomato"
        },
        {
            value: "apple",
            extras: [
                {
                    value: "green"
                }, {
                    value: "red"
                }
            ]
        },
        {
            value: "pineapple"
        }
    ]
};
var myArray = {
    type: []
};


var count = items['type'].length;

//Loop through main items in "type"
for (i = 0; i < count; i++) {

    var subarray = [];
    subarray.push(items['type'][i]['value']);

    if (items['type'][i]['extras']) {
        var extracount = items['type'][i]['extras'].length;
        //Loop through extras
        for (k = 0; k < extracount; k++) {

            var extra = items['type'][i]['extras'][k]['value'];
            subarray.push(extra);
        }
    }
    myArray['type'].push(subarray);
}

一些注意事项:

你肯定需要在javascript中学习数组和对象之间的区别。网上有很多资源可供选择。

从对象prop检索/操作属性obj时(例如,对于键值对),您需要使用obj.propobj['prop']。请注意在后一个示例中使用字符串。

对于数组arr,您应该使用arr.push(value)将新值推送到数组中。

答案 1 :(得分:0)

你的问题在这里:

 var value = items[type][i][value]; 

你应该把它改成

 var value = items[type][i].value;