javascript 数组去重

javascript数组没有类似于array_uniq的方法,在项目中遇到数组去重的问题,就用了下面这种方法。

 

买200元送100元,打几折?

我们经常看到商场打折,电商打折,买200送100元代金券,代金券只能下次用。如果我一定要算出打几折,应该怎么算?

很多人第一反应是5折,因为花200元买了200元的商品,有返还100元,就相当于花了100元买了200元的商品。还有很多人第一反应是67折,因为如果下次再买100元的商品用代金券就可以了,就相当于是花200元买了300元的商品,当然是打67折。

但是上面说的仅仅是很多情况中的两种。注意,代金券需要购买商品才能体现价值,如果某人拿了代金券而不再购买或者在代金券有效期内没有购买,代金券的价值就没有体现出来,也就相当于没有打折了。把所有可能情况都考虑进来,不仅是写代码的基本要求,也是做工程,做财会,做投资,做教育,做管理等等大部分行业的要求。对于此计算打折问题,我们需要考虑的因素包括本次购买花了多少元,下次购买花了多少元。

我的思路是这样的:(如有不妥的地方,欢迎指正)

假设本次购买x元,第二次购买y元。

若x<200,则不打折;

若x>=200,则需按第二次购买的数额来确定打折数。

若y<=100,这其中就包括了y=0的情况,即使用100元代金券购买了小于等于100元的商品,此时折扣为x/(x+y)。

若y>100,即使用代金券抵了100元,此时折扣为(x+y-100)/(x+y)。

当然还有可能第二次购买是还在继续进行买200送100优惠活动,折扣这样算还没完。

写这篇短文这是为了记录自己曾经考虑问题不周,以告诫自己做事做人要严谨细致。

javascript判断一个变量或对象是否存在

判断一个变量或对象是否存在,是一种常用的操作。我这里收集了几种。

 

面向对象设计SOLID五大原则

转载自:码农社区,http://w3croom.com/read.php?tid-4522.html

今天我给大家带来的是面向对象设计SOLID五大原则的经典解说。

我们知道,面向对象对于设计出高扩展性、高复用性、高可维护性的软件起到很大的作用。我们常说的SOLID五大设计原则指的就是:

S = 单一职责原则 Single Responsibility Principle
O = 开放闭合原则 Opened Closed Principle
L = Liscov替换原则 Liscov Substitution Principle
I = 接口隔离原则 Interface Segregation Principle
D = 依赖倒置原则 Dependency Inversion Principle

我们一一去解说面向对象的五大设计原则:
1. 单一职责原则
引起类变化的因素永远不要多于一个,或者说:一个类有且只有一个职责。
如果类包含多个职责,代码会变得耦合;SRP看起来是把事物分离成分子部分,以便于能被复用和集中管理,这点也同样适用于方法级别。

2. 开放封闭原则
软件实体(类,模块,函数等等)应当对扩展开放,对修改闭合。
如图:客户端和服务段都耦合在一起。那么,只要出现任何变化,服务端变化了,客户端一样需要改变。

下面则是正确的设计:对外关联接口或者抽象类

3.Liskov’s 替换原则
子类型必须能够替换它们基类型,或者说使用基类引用的函数必须能使用继承类的对象而不必知道它。
为什么LSP这么重要:
● 如果没有LSP,类继承就会混乱;如果子类作为一个参数传递给方法,将会出现未知行为;
● 如果没有LSP,适用与基类的单元测试将不能成功用于测试子类;

4. 接口分离原则
客户端不应该被迫依赖于它们不用的接口
接口应该仅包含必要的方法,而不该包含其它的。比如:

注意到IBird接口包含很多鸟类的行为,包括Fly()行为.现在如果一个Bird类(如Ostrich鸵鸟)实现了这个接口,那么它需要实现不必要的Fly()行为(Ostrich不会飞). 这个”胖接口”应该拆分未两个不同的接口,IBird和IFlyingBird,IFlyingBird继承自IBird. 这里如果一种鸟不会飞(如Ostrich),那它实现IBird接口。如果一种鸟会飞(如KingFisher),那么它实现IFlyingBird

5. 依赖倒置原则
高层模块不应该依赖底层模块,两者都应该依赖其抽象。
比如说一个汽车类:
class Car{
AmericanEnginee e; //这样是不对的,应该依赖于接口,必须写成IEngine e;
}
如果代码中不用依赖倒置,我们将面临如下风险:
● 使用低级类会破环高级代码;
●当低级类变化时需要很多时间和代价来修改高级代码;
● 产生低复用的代码;

除SOLID原则外还有很多其它的面向对象原则。如:
“组合替代继承”:这是说相对于继承,要更倾向于使用组合;
“笛米特法则”:这是说”你的类对其它类知道的越少越好”;
“共同封闭原则”:这是说”相关类应该打包在一起”;
“稳定抽象原则”:这是说”类越稳定,越应该由抽象类组成”;

关于面向对象的原则还可参考:http://www.iteye.com/news/24488

解决CI框架的Disallowed Key Characters错误提示

在用ckeditor(一个JS富文本编辑器)向后台提交带有表格,链接的文章时,后台报错”Disallowed Key Characters”,后台用的是CodeIgniter框架。解决 CodeIgniter 框架应用中,出现Disallowed Key Characters错误提示的方法。找到core文件夹下的Input文件,将下面的代码:

改成这样:

或者改成: