仅展平第一层数组

时间:2014-07-15 05:02:50

标签: javascript functional-programming

我努力使用函数式编程创建自己的flatten函数。除非出于某种原因,否则错误不包含在答案中。我试图在codewars上输入它作为答案,它适用于除此之外的所有情况:

flatten([[[1,2,3]]]) // => [[1,2,3]]

相反,我的代码正在输出:

flatten([[[1,2,3]]]) // => [1,2,3]

令人沮丧的是,我认为我的答案比提供的默认答案更有意义。但无论如何我还是想解决这个问题。我面临的挑战是,我已经构建了一些如此复杂的东西,很难在不破坏整个结构并且需要整个重构的情况下进行修改。我想为上面的特殊情况创建一个函数但不确定如何在不中断当前结构的情况下执行此操作。我该如何实现这种方法?

这类事情的所有其他线程都处理numpy,我无法找到与Javascript相关的任何内容。 Kthnx

性感代码:

var flatten = function (parentArray) {
return reduce(pushArray,[],parentArray);
}

function reduce(combine, base, array) {
  forEach(array, function(element) {
    base = combine(base,element);
  });
  return base;
}

function pushArray(baseArray,tempArray) {
  while (tempArray[0]) {
  baseArray.push(tempArray.shift()); }
return baseArray;
}

1 个答案:

答案 0 :(得分:0)

只是评论,但我需要空间:

假设 forEach 函数类似于:

function forEach(arr, fn) {
  for (var i=0, iLen=arr.length; i<iLen; i++) {
    if (arr.hasOwnProperty(i)) {
      fn(arr[i], i, arr);
    }
  }
}

然后:

flatten([[[1,2,3]]]) // => [[1,2,3]]

这似乎是你想要的。或者我误解了这个问题?