虽然第一个索引是一个数组?

时间:2017-07-05 18:29:00

标签: javascript

我可以告诉我从第3帧到第4帧经历了我的while循环。

我没有正确检查我的while循环中的条件吗?

function steamrollArray(arr) {
  var R2 = [];
  while (arr[0].isArray) {
    console.log(arr[0]);
    R2.push(arr[0]);
    return R2;
  }
  return R2;
}

steamrollArray([[["a"]], [["b"]]]); // should return ["a", "b"].
steamrollArray([1, [2], [3, [[4]]]]); // should return [1, 2, 3, 4].
steamrollArray([1, [], [3, [[4]]]]); // should return [1, 3, 4].
steamrollArray([1, {}, [3, [[4]]]]); // should return [1, {}, 3, 4].

Step 3 to 4

3 个答案:

答案 0 :(得分:2)

function steamrollArray(arr) { var R2 = []; while (Array.isArray(arr[0])) { console.log(arr[0]); R2.push(arr[0]); return R2; } return R2; } 是一种数组方法 - Array.isArray

unsigned char

答案 1 :(得分:2)

你使用isArray是错误的。 这是一种方法,它接受输入并检查它是否是一个数组。

function steamrollArray(arr) {
  var R2 = [];

  while (Array.isArray(arr[0])) {
    console.log(arr[0]);
    R2.push(arr[0]);
    return R2;
  }
  return R2;
}

答案 2 :(得分:0)

您的代码似乎有一些逻辑错误(除了不使用Array.isArray时的语法错误)。要获得所需的结果,您可以使用如下的递归:



function steamrollArray(arr) {
  var R2 = [];

  for (var element of arr) {
    var nextElements = []; 

    while (Array.isArray(element)) {
      nextElements = element.slice(1);
      element = element[0];
    }

    if (!element) continue;

    R2.push(element);
    var rolledNextElements = steamrollArray(nextElements);
    R2 = R2.concat(rolledNextElements);
  }

  return R2;
}

console.log(steamrollArray([[["a"]], [["b"]]]));
console.log(steamrollArray([1, [2], [3, [[4]]]]));
console.log(steamrollArray([1, [], [3, [[4]]]]));
console.log(steamrollArray([1, {}, [3, [[4]]]]));