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/
我希望我喜欢使用内置数组方法的算法,但是如果你有一些惊人的自定义方法或类似的方法来添加到原型中,那就太棒了.
注意:我的目标不是用效率较低的函数方法替代更有效的迭代方法等等......它只是对功能美的探索;)
你可以用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)
归档时间: |
|
查看次数: |
254 次 |
最近记录: |