Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 围绕数组的嵌套循环_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript 围绕数组的嵌套循环

Javascript 围绕数组的嵌套循环,javascript,jquery,arrays,Javascript,Jquery,Arrays,我试图循环一个数组的所有值,并将循环数据推送到另一个数组中 例如: { "cat": [ { "view": [ { "ent": [ { "data": [ {} ], "lab

我试图循环一个数组的所有值,并将循环数据推送到另一个数组中

例如:

{
"cat": [
    {
        "view": [
            {
                "ent": [
                    {
                        "data": [
                            {}
                        ],
                        "label": "abcd"
                    },
                    {
                        "data": [
                            {}
                        ],
                        "label": "efgh"
                    }
                ]
            }
        ]
    }
]
我需要迭代到label,并将label的所有值放入一个数组中。这就是我尝试过的。 问题是,我刚刚在数组变量中得到标签的最后一个值,即赢得

JS:

var ArrL=scope.res.cat;
var数组=[];

对于(var i=0;i您应该使用循环中的推送

    for(var i=0;i<ArrL.length;i++){
                ArrF = ArrL[i].view;
                for(var j=0;j<ArrF.length;j++){
                    ArrE = ArrF[j].ent;
                    for(var k=0;k<ArrE.length;k++){
                        ArrLa = ArrE[k].label;
                        Array.push(ArrLa);
                    }

                }

            }

for(var i=0;i您应该在循环中使用push

    for(var i=0;i<ArrL.length;i++){
                ArrF = ArrL[i].view;
                for(var j=0;j<ArrF.length;j++){
                    ArrE = ArrF[j].ent;
                    for(var k=0;k<ArrE.length;k++){
                        ArrLa = ArrE[k].label;
                        Array.push(ArrLa);
                    }

                }

            }

for(var i=0;i好吧,在迭代了
视图
数组之后,您只需推送分配给
ArrLa
的最后一个值。相反,当遇到该值时,请立即推送该值:

var Array = [];
for(var i=0;i<ArrL.length;i++){
    var ArrF = ArrL[i].view;
    for(var j=0;j<ArrF.length;j++){
        var ArrE = ArrF[j].ent;
        for(var k=0;k<ArrE.length;k++){
             Array.push(ArrE[k].label);
        }
    }
}
console.log(Array);
var数组=[];

对于(var i=0;i那么,在迭代了
视图
数组之后,只需推送分配给
ArrLa
的最后一个值。相反,当遇到该值时,请立即推送该值:

var Array = [];
for(var i=0;i<ArrL.length;i++){
    var ArrF = ArrL[i].view;
    for(var j=0;j<ArrF.length;j++){
        var ArrE = ArrF[j].ent;
        for(var k=0;k<ArrE.length;k++){
             Array.push(ArrE[k].label);
        }
    }
}
console.log(Array);
var数组=[];

对于(var i=0;i,由于您的Q被标记为jquery,您可以这样做:

var cat = [
    {
        view: [
            {
                ent: [
                    {
                        data: [
                            {
                                key: "id",
                                value: "00"
                            }, 
                            {
                                key: "cid",
                                value: "123"
                            }
                        ],
                        label: "joy"
                    }, 
                    {
                        key: "id",
                        value: "11"
                    }, 
                    {
                        key: "cid",
                        value: "234"
                    }
                ], // end ent
                label: "won"
            }, 

        ] //end view
    }
];

var labels = [];

$.map( cat, function flattener( node ) {
    if ( $.isPlainObject( node ) && node.hasOwnProperty('label') ) {
        labels.push( node.label );
    }
    return ($.isArray( node ) || $.isPlainObject( node )) ? $.map( node, flattener) : node;
} );

console.log( labels );
小提琴:

需要注意的是,顺序将由深度决定:更深的标签排在最后

更新: 很容易将其转换为实用功能:

function grabKeys( source, keyName ) {
    var values = [];

    $.map( source, function flattener( node ) {
        if ( $.isPlainObject( node ) && node.hasOwnProperty(keyName) ) {
            values.push( node[keyName] );
        }
        return ($.isArray( node ) || $.isPlainObject( node )) ? $.map( node, flattener) : node;
    } );

    return values;
}


var labels = grabKeys( cat, 'label' );
var cids = grabKeys( cat, 'cid' );
更新2:由于“cid”是一个键值而不是名称,我们必须使用稍微不同的方法。很抱歉,我以前没有注意到它

function grabPairedKeys( source, keyValue, keyName1, keyName2 ) {
    keyName1 = keyName1 || 'key';
    keyName2 = keyName2 || 'value';

    var values = [];

    $.map( source, function flattener( node ) {
        if ( $.isPlainObject( node ) && node.hasOwnProperty(keyName1) && node.hasOwnProperty(keyName2) && node[keyName1] === keyValue ) {
            values.push( node[keyName2] );
        }
        return ($.isArray( node ) || $.isPlainObject( node )) ? $.map( node, flattener) : node;
    } );

    return values;
}


var labels = grabKeys( cat, 'label' );
var cids = grabPairedKeys( cat, 'cid' );

由于您的Q被标记为jquery,因此可以执行以下操作:

var cat = [
    {
        view: [
            {
                ent: [
                    {
                        data: [
                            {
                                key: "id",
                                value: "00"
                            }, 
                            {
                                key: "cid",
                                value: "123"
                            }
                        ],
                        label: "joy"
                    }, 
                    {
                        key: "id",
                        value: "11"
                    }, 
                    {
                        key: "cid",
                        value: "234"
                    }
                ], // end ent
                label: "won"
            }, 

        ] //end view
    }
];

var labels = [];

$.map( cat, function flattener( node ) {
    if ( $.isPlainObject( node ) && node.hasOwnProperty('label') ) {
        labels.push( node.label );
    }
    return ($.isArray( node ) || $.isPlainObject( node )) ? $.map( node, flattener) : node;
} );

console.log( labels );
小提琴:

需要注意的是,顺序将由深度决定:更深的标签排在最后

更新: 很容易将其转换为实用功能:

function grabKeys( source, keyName ) {
    var values = [];

    $.map( source, function flattener( node ) {
        if ( $.isPlainObject( node ) && node.hasOwnProperty(keyName) ) {
            values.push( node[keyName] );
        }
        return ($.isArray( node ) || $.isPlainObject( node )) ? $.map( node, flattener) : node;
    } );

    return values;
}


var labels = grabKeys( cat, 'label' );
var cids = grabKeys( cat, 'cid' );
更新2:由于“cid”是一个键值而不是名称,我们必须使用稍微不同的方法。很抱歉,我以前没有注意到它

function grabPairedKeys( source, keyValue, keyName1, keyName2 ) {
    keyName1 = keyName1 || 'key';
    keyName2 = keyName2 || 'value';

    var values = [];

    $.map( source, function flattener( node ) {
        if ( $.isPlainObject( node ) && node.hasOwnProperty(keyName1) && node.hasOwnProperty(keyName2) && node[keyName1] === keyValue ) {
            values.push( node[keyName2] );
        }
        return ($.isArray( node ) || $.isPlainObject( node )) ? $.map( node, flattener) : node;
    } );

    return values;
}


var labels = grabKeys( cat, 'label' );
var cids = grabPairedKeys( cat, 'cid' );

您定义的
ArrLa
?似乎是无效的
json
结构。
},]
。它根本不是json,只是一个普通数组。尾随逗号形式不好,但在大多数JS引擎中都能工作。我只是添加了基本的json,它不是实际的json结构。ArrLa只是一个变量……声明了所有没有var关键字traili的变量ng逗号是懒惰的,在你定义了
ArrLa
?的IE中,它似乎是一个无效的
json
结构。
},]
。它根本不是json,只是一个普通的数组。后面的逗号形式不好,但在大多数JS引擎中都能工作。我刚刚添加了基本的json,它不是一个实际的json结构。ArrLa只是一个变量……声明了一个所有不带var关键字尾随逗号的变量都是惰性的,在IET中失败率很高。非常感谢兄弟,您的代码非常小,并且给出了准确的值。如果我需要键“cid”的值以及如何修改代码的标签。再次非常感谢您……预期的输出应该是cid:[“234”,“123”]和标签:[“赢得”、“喜悦”]。我只收到标签的输出,但没有收到cid的输出。我更改了您以前的小提琴的代码,并尝试将其替换为更新的小提琴。请附上预期结果的小提琴。我非常感谢您…更新2添加。有一个小的误解。非常感谢您的兄弟,您的代码非常小,并给出了准确的值。如果我需要键“cid”的值以及如何修改代码的标签。再次非常感谢……预期输出应该是cid:[“234”,“123”]和标签:[“赢得”,“喜悦”]。我只收到标签的输出,但没有收到cid的输出。我更改了您以前的小提琴的代码,并尝试将其替换为更新的小提琴。能否请您附上预期结果的小提琴。我非常感谢您…添加了更新2。有一个小的误解。