推送到数组

Pushing to array

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

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

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

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

如果我声明一个空数组,我该如何:

您的问题在这里:

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

你应该把它改成

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

这就是我相信你想要的。以下代码可能不正确,因为我正在近似我认为您的 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 中了解数组和对象之间的区别。网上有很多资源可以做到这一点。

当 retrieving/manipulating 来自对象 obj 的 属性 prop 时(即对于 key-value 对),您将需要使用 obj.propobj['prop']。请注意在后一个示例中使用了字符串。

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