删除数组递归调用模式中的项目?

时间:2016-02-25 21:34:00

标签: javascript arrays recursion

当处理数组对象中的递归调用时,我将数组传递给函数和每个正在进行的调用,我希望数组参数为n-1。

我通常使用:

  • Array.prototype.shift
  • Array.prototype.pop

我必须在递归调用之前将这些方法称为行。请查看以下示例。

这是我通常诉诸的地方:

function responseData(urls){
    if (urls.length-1){
        return;
    }
    http.get(urls[0], function(res) {
      res.setEncoding('utf8');
      var body = '';
      res.on('data', function(chunk) {
        body += chunk;
      });
      res.on('end', function() {
            console.log(body.toString());
            urls.shift(); // NOTICE THIS LINE
            printResponseData(urls);
      });
    });
}

这种方法有更清洁的替代方案吗?

我可以使用返回值的shiftpop消除一个最小化数组大小并返回新近化数组的方法,以便我可以直接将其传递给递归调用吗?

2 个答案:

答案 0 :(得分:3)

您可以使用slice method来获取更小的数组。它不会改变原始参数,而是创建一个新参数。

要获取没有第一个元素的数组,请使用

urls.slice(1)

要获取没有最后一个元素的数组,请使用

urls.slice(0, -1)

答案 1 :(得分:0)

我猜这就是你的意思?

printResponseData(urls.slice(1));

将跳过第一个元素并将其余元素放在数组的末尾

// or
printResponseData(urls.slice(0, -1));

将从数组的开头给出倒数第二个元素。