在Javascript中外部数组如何知道内部数组完成了迭代?因为我用递归函数迭代下面的数组想要知道外部函数或外部数组如何知道内部数组完成了迭代。
{
"rules": [
{
"id": 1,
"value": "ABC"
},
{
"id": 2,
"value": "PQR"
},
{
"id": 3,
"value": "XYZ"
},
{
"rules": [
{
"id": 10,
"value": "ST"
},
{
"id": 12,
"value": "UI"
}
]
},
{
"id": 5,
"value": "5XYZ"
}
]
}
使用递归函数迭代数组。
要求输出如 ABC,PQR,XYZ,5XYZ 在Group ST,UI
中var message = '';
var infoMessage = getMessageData(false);
function getMessageData(isGroup) {
angular.forEach(rulesArray, function(v, k) {
if (rulesArray.id === undefined) {
message + = getMessageData(true);
} else {
message + = v.value;
if (isGroup) {
message + = 'Within Group' + v.value;
}
}
};
}
}
答案 0 :(得分:0)
如果我理解正确,你可以尝试这样的事情:
rules
的对象对数组进行排序并将其推回id
,则将value
联合回复rules
,请使用递归并获取响应并连接它。
var data = { "rules": [{ "id": 1, "value": "ABC" }, { "id": 2, "value": "PQR" }, { "id": 3, "value": "XYZ" }, { "rules": [{ "id": 10, "value": "ST" }, { "id": 12, "value": "UI" } ] }, { "id": 5, "value": "5XYZ" } ] }
const key = 'rules';
data.rules.sort(function(a,b){
return +(key in a) - +(key in b);
});
function getMessage(obj) {
return obj.reduce(function (p, c, i, a){
if('id' in c) {
p += c.value + (i !== a.length -1 ? ', ': '');
}
if('rules' in c) {
p += getMessage(c.rules);
}
return p;
}, '')
}
console.log(getMessage(data.rules))
答案 1 :(得分:0)
你带队列收集和处理rules
的所有项目,并带有一个用于插入群组短语的计数器。
function iterate(array) {
var queue = array.slice(),
group = array.length,
temp,
result = '';
while (queue.length) {
temp = queue.shift();
if (temp.rules) {
Array.prototype.push.apply(queue, temp.rules);
continue;
}
if (--group) {
result += (result && ', ') + temp.value;
continue;
}
result += ' Within Group ' + temp.value;
}
return result;
}
var data = { rules: [{ id: 1, value: "ABC" }, { id: 2, value: "PQR" }, { id: 3, value: "XYZ" }, { rules: [{ id: 10, value: "ST" }, { id: 12, value: "UI" }] }, { id: 5, value: "5XYZ" }] };
console.log(iterate(data.rules));