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。有一个小的误解。