Javascript - 从数组末尾删除空元素的功能方法

Far*_*ina 1 javascript arrays algorithm

输入数组如下:

var arr = ["some", "", "", "value", "", "", ""];
Run Code Online (Sandbox Code Playgroud)

我需要从尾部删除空元素.所以预期的输出是:

["some", "", "", "value"]
Run Code Online (Sandbox Code Playgroud)

我知道一个无聊的反向循环可以工作,或pop()直到它来到第一个非空元素.例如:

while(arr.pop() === "")
Run Code Online (Sandbox Code Playgroud)

然而,只是为了好玩,我希望看到一个同样或更有效(如果可能)的功能方法.

我的第一个功能想法是使用reverse - > reduce - > reverse来实现它.然而它似乎很复杂,所以我想看看是否有人有更好的方法.

var arr = ["some", "", "", "value", "", "", ""];

var result = arr.reverse()
    .reduce(function (a, b) {
        if (b != "")
            a.addallnext = true;

        if (a.addallnext === true)
            a.result.push(b);

        return a;
    }, {
        addallnext: false, result: []
    }).result.reverse();
Run Code Online (Sandbox Code Playgroud)

这是我的小提琴:

http://jsfiddle.net/fy4cuspq/1/

我希望我喜欢使用内置数组方法的算法,但是如果你有一些惊人的自定义方法或类似的方法来添加到原型中,那就太棒了.

注意:我的目标不是用效率较低的函数方法替代更有效的迭代方法等等......它只是对功能美的探索;)

Ion*_*tan 8

你可以用reduceRight.我Array.prototype.concat用来保持代码没有突变.另外,我依靠结果的长度来查看何时停止删除空字符串.

var reducedArray = arr.reduceRight(function (result, a) {
  return result.length === 0 && a === ""
       ? result
       : [a].concat(result);
}, []);
Run Code Online (Sandbox Code Playgroud)