Skip to content

Instantly share code, notes, and snippets.

@jikeytang
Last active August 29, 2015 14:02
Show Gist options
  • Save jikeytang/af010819546933297a28 to your computer and use it in GitHub Desktop.
Save jikeytang/af010819546933297a28 to your computer and use it in GitHub Desktop.
[ Javascript ] - 20140606-题目1
如何进行一个深拷贝,是数组且去重。
如:[1,2,3],[2,3,4,5] -> [1,4,5]
[1,2,3], {a:6, b:3} -> [1,2,3, a:6, b:3]
就是如何简单实现类jquery的$.extend(true, a, b)的效果。
但与
jQuery.extend(true,[1,2,3],[2,3]) // [2,3,3]
区别是题目要求得到是: 2,3,取其中不重复的。
PS:
1. 回复时注意加上下面这句话,才会有语法高亮或格式缩进。
```javascript
// you code
```
2. 粘贴代码时请使用shift+tab,缩进前面的空白。
@nambo
Copy link

nambo commented Jun 12, 2014

//楼上的算法正确,但是代码有些错误,改正如下
//1、concat不会改变Array本身值,故需要result = result.concat(args.shift());
//2、join(''),这里join空的话无法区分[1232,24]这样首尾由相同字符组成的值;
//3、/(\w)(?=\w*\1)/gi,这里相同字符组成的数组无法处理

var test = function(){
    var args = [].slice.call(arguments,0),
        length = args.length-1,
        result = args.shift(); // 这里不对任何参数进行直接修改了

    while(--length>-1){
       result = result.concat(args.shift());
    }
    result.sort();
    return (result.join(",")+",").replace(/(\w*,)(?=\1)/gi, ",").replace(/,,/g,",").split(",");
};
test([2,222,2222,222222], [222,22,222222,2]);

@rambo-panda
Copy link

谢谢楼上@nambo指导 当时匆忙写下。未来得及测试。
补正一下
sort不需要进行排序一下吗? 默认会按照 ASCII 字符顺序,则将按升序对这些元素进行排序

result.sort(function(a,b){return a,b});   //  这里排序 作用大吗? 回家测试一下 哈哈

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment