外部数组如何知道内部数组完成了它的迭代

时间:2017-09-18 09:35:04

标签: javascript angularjs arrays recursion

在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

EDIT1

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

2 个答案:

答案 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));