标签 代码段 下的文章

JavaScript 深拷贝的实现

这里的深拷贝总体考虑的还是比较浅显的,主要是考虑引用类型中,我们需要把引用类型拷贝下来,这里主要考虑的引用类型,说白了其实还是很少的,主要就是自己定义的objectArray

在面试中,题目也是类似于拷贝数组一类的题。

当然,觉得自己的代码还是不够好看,希望菊苣们指摘。

另外,本来我也是喜欢直接写在原型上修改的,但是之前看到说原型上修改会出很多不可预知的错误(大家一起改),所以还是用传统的函数

- 阅读剩余部分 -

菜鸟说动态规划

从我学习至今,我有三大心理阴影:递归、正则表达式、动态规划——这三个导致让我怀疑智商怀疑人生。

在这次假期刷题的时候,前两个似乎都已经不是问题了,就差动态规划——昨天不行random到一道题,一眼望着就是动态规划了——可是我不会啊。

You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return -1.

题目来自LeetCode,本来是不准备写LeetCode的题了,全都在GitHub上了大家看看就行了,不过这题有助于让我们更好地理解(第一次理解)动态规划。

- 阅读剩余部分 -

JavaScript JSON stringify格式化Date不正确

有同学问了我一个很特殊的需求,他需要格式化date为json格式,可是结果却不正确。

我们来试一把:

new Date();
// Sat Jan 09 2016 12:34:05 GMT+0800 (CST)
JSON.stringify(new Date());
// "\"2016-01-09T04:34:28.242Z\""

看上去确实不一样——不过我们能看到,差8个小时,不就是GMT(UTC)的标准时间跟我们的区别么?

也就是说,JSON.stringify会默认转换时间,解决的方案在stackoverflow也有:

x = new Date();
x.setHours(x.getHours() - x.getTimezoneOffset() / 60);

这样能够还原成UTC,就完全一致了。

当然,最好的自然还是使用时间戳啦:

Date.parse(new Date());
(new Date()).valueOf();
new Date().getTime()
其中:第一种获取的时间戳是把毫秒改成000显示,第二种和第三种是获取了当前毫秒的时间戳。

当然,没有想到什么特殊的需求需要用客户端获取时间给服务端……

另外,JSON.stringify以前竟然不知道,孤陋寡闻了。

最后想说的是,json没有标准时间格式这一说,在json.org中也有说明关于json的数据(value)类型。

参考:

PHP 使用curl获取网页内容

在上一篇文章中,我们试图获取Bing的壁纸,但是却发现它虽然是个标准的json,但不支持跨域,响应头没有:Access-Control-Allow-Origin: *

上一次用curl还是刚学PHP的时候复制粘贴的,现在感受深多了,看得懂到底是怎么回事了,不过我们的需求也比上次简单多了,上次是缓存图片到本地,而这次我们只要把内容输出就可以了。

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1");
curl_setopt($ch, CURLOPT_HEADER, 0);
$out = curl_exec($ch);

curl_close($ch);

- 阅读剩余部分 -

jQuery 初试jsonp

说来惭愧,写了这么久的前端(大概),还没有使用过jsonp(后来我发现假期用Angular+Rails使用过。。。http://codesky.me/archives/rails-solve-cross-query.wind),这次在微博中,一个好友遇到了一个需要跨域的问题,那么机会来了。

我第一反应就是jsonp,尽管他说不可以,然而我还是想要试试看。

用最顺手的jQuery吧,话虽如此,jQuery也快忘了。

- 阅读剩余部分 -

JavaScript 运算符与强制类型转换

对于弱类型语言而言,隐式的类型转换永远是个大坑,你永远不知道什么时候会踩到坑。

好不容易做完了课设,到复习期间大概还有那么几天时间,准备稍微看看红宝书——JavaScript高程,当年什么都不懂看到脑袋爆炸,现在虽然表面上看着写写JavaScript已经没什么问题,实际上对于很多东西依旧不是很清楚。

这次就刚看到一个很好玩的东西。

首先:

1.1 + "1.1" // "1.11.1"
+"1.1" + 1.1 // 2.2
"1.1" - 1.1 // 0
1.1 - "1.1" // 0

这里我们大概需要知道的是,如果一个字符串可以转换为数字(内部调用的是Number()函数),那么在转为数字后可以参与运算了,但是如果是字符串加上数字,那么可以视其为字符串拼接。

比如第一个就是明显的字符串拼接。但是如果加上符号,那么就会先进行一个类型转换,在与后面的数字运算。

而减法不具有拼接效果,因此就是转换啦。

HTML 给后端传入数组与check默认值

在使用checkbox中,很多时候,我们其实是要传入数组的,实际上,在

HTML中,只要将name设置为check[]即可。

这样在PHP中获取到的check就是一个数组的形式。

此外,有些时候,即使不勾选,我们依旧需要check拥有一个不勾选的默认值,然而,check默认只有勾选项才会传入值,解决方法挺有意思的:

<input type="hidden" value="0" name="check[{{$list->id}}]">

加入一个相同name的hidden,如果不勾选,就会传入此值,否则,checkbox中的值将会覆盖原值,相当有趣。

Ruby 正则小脚本处理空行

Ruby学了主要作用大概也就是写写脚本了(毕竟传说中的Python/Ruby二选一),躺在床上想到因为复制黏贴下来少回车,在有的Markdown中会解析为没换行,有的则是<br/>,这让人非常的烦躁!所以需要处理一下,怎么处理最快——用脚本。

首先先匹配,在Ruby正则表达式中,+匹配一次或以上,我们需要匹配\n,所以需要用多行的模式m

re = Regexp.new(/\n+/m)

匹配替换用的是String.gsub方法。表示替换全部,sub只替换首次匹配的部分。

result = file.gsub(re, "\n\n")

- 阅读剩余部分 -

OSX Vagrant+Parallels Desktop 上手配置搭建LAMP环境

今天晚上准备看Java教程,看到了Docker,然后研究了一下,突然想到Vagrant这个假期想看结果忘记了的东西。

Docker看了一下,发现这个相当于多人共用集成环境,但是隔离做得好,也就是切成一小块一小块来使用,大家的环境是相同的。

Vagrant,不要以为他们俩是一样的,实际上完全不同,Vagrant是统一打一个包,然后分发给各个开发者,让他们在自己的虚拟机里模拟。

Docker比较适合大规模的开发,而Vagrant则接近于随你喜欢——我可以用它来统一团队开发环境,也可以仅仅是想少开一个虚拟机而模拟服务器环境(尤其是你不用为了跑不动虚拟机和驱动支持而烦恼了!!!)。

- 阅读剩余部分 -