标签 代码段 下的文章

JavaScript 说一个排序算法

依旧还是面试题,比较麻烦的是,这个排序的关键在于,我们需要时间复杂度为O(n),空间复杂度为O(1)。

题目大概是这样的,看了输入输出基本就会明白了:

input: arr = ['', 'a', 'b', '', 'a', 'c', '*', 'm']
output: [ '', '', '*', 'a', 'a', 'b', 'c', 'm' ]
问题描述:将数组中的字母与星号分开

这里其实主要没做出来是因为我没有很好地理解怎么计算复杂度,尤其是空间复杂度,时间复杂度我勉强记忆成for循环的嵌套还是可以的,但是空间复杂度呢?

- 阅读剩余部分 -

JavaScript 多维数组转一维数组

面试时还被问到多维数组如何转换成一维数组的问题,这个问题比较灵活,其实也有很多种解法,当然,考虑到面试时候比较紧张,还是踏踏实实的用传统的方法来,和深拷贝一样,依旧是使用递归。

由于没有额外需要考虑的东西,因此这题实际上比起深拷贝来说要简单许多:

var convert = function(arr) {
    var newArr = [];

    arr.forEach(function(val) {
        if (val instanceof Array) {
            Array.prototype.push.apply(newArr, convert(val));
        } else {
            newArr.push(val);
        }
    });

    return newArr;
};

- 阅读剩余部分 -

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中的值将会覆盖原值,相当有趣。