如何使这个程序性JS更加实用
How could this procedural JS be made more functional?
给定这个基于用户设置重新排序数组的函数。。。
function getDayNamesInUserOrder() {
var dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
var weekStartDayIndex = 2; // user has set this to be 2 (Tuesday)
// remove the first n days from the front of the array...
var daysSlicedFromStart = dayNames.splice(0, weekStartDayIndex);
// and stick them onto the end of it.
var dayNamesInUserOrder = dayNames.concat(daysSlicedFromStart);
return dayNamesInUserOrder;
}
getDayNamesInUserOrder();
=> ['Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Mon']
如何在使用更少的状态和变量的同时使其更具功能性?
这个怎么样?
function getDayNamesInUserOrder(offset) {
var dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
return [0,1,2,3,4,5,6].map(function (i) {
return dayNames[(i+offset) % 7];
});
}
您可以这样做:
function getDayNamesInUserOrder(startIndex) {
var dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
var result = [];
for (var i = 0; i < dayNames.length; i++) {
result.push(dayNames[(startIndex + i) % dayNames.length]);
}
return result;
}
演示:http://jsfiddle.net/jfriend00/ddhagb33/
仅供参考,似乎很难找到"函数式编程"的清晰定义。我能找到的是:
- 数据应该是不可变的——如果你想要一个修改过的数据版本,你可以创建一个新的修改过的副本
- 函数应该是无状态的(没有影响将来调用同一函数的副作用)
这个函数同时满足这两个条件(就像你原来的函数一样)。如果你有一个更具体的愿望"更实用",那么请准确地描述你想要什么。
function getDayNamesInUserOrder() {
var dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
var weekStartDayIndex = 2; // user has set this to be 2 (Tuesday)
return dayNames.concat(dayNames).slice(weekStartDayIndex, weekStartDayIndex + 7);
}
相关文章:
- Ember.js-自动使动作成为目标控制器
- JS代码使IE9和Safari冻结,在Opera中不起作用
- 如何在d3.js中使矩形呈弧形/弯曲
- 在 JS 中使 for 循环在没有库的情况下等待
- 原型js 如何使定期更新程序隐藏基于ajax响应的类元素
- 挖空JS模板使UI在编辑时“闪现”
- React.js:如何使内联样式在状态更改时自动更新进度条
- 如何在D3.js中使矩形居中
- Three.js地球仪-使国家/地区可点击
- Three.js-如何使我的文本精灵更清晰
- 在敲除js中,这两种编码方法有什么区别
- 桌面 HTML + CSS + JS 应用程序?这怎么可能
- 有没有办法使这段代码更短
- 如何在 js 中使对象在 js 中具有 javascript 中的外部值
- 在拉斐尔.js中使物体相互推挤
- 如何使这参考我点击的对象Javascript
- js,使 JSON 对象成为字符串 - 简单的方法
- 是什么使这两个require.js调用彼此不同呢?
- 使这段JS代码不引人注目.为未知id编写事件侦听器
- 如何将JS添加到这段代码中,使其自动滑动