编程题

目录

数组中找重复

题目描述
找出数组 arr 中重复出现过的元素

输入例子:
duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3]).sort()

输出例子:
[1, 3, 4]

解法一:

function duplicates(arr) {
 return arr.sort(function(a,b){
     return a - b;
 }).filter(function(item,index,array){
     return arr[index] === arr[index+1] && arr[index] !== arr[index - 1];
 });
}

解法二:

function duplicates(arr) {
    var a=arr.sort(function(a,b){
       return a - b;
    });
    var b=[];
    for(var i in a){
        if(a[i]==a[i-1] && b.indexOf(a[i])==-1) b.push(a[i]); 
    }
    return b;
}//先排序,如果后一个与前一个相等且未保存,则保存。

数组中某元素位置

题目描述
在数组 arr 中,查找值与 item 相等的元素出现的所有位置

输入例子:
findAllOccurrences('abcdefabc'.split(''), 'a').sort()

输出例子:
[0, 6]
解法一:

function findAllOccurrences(arr, target) {
    var result= [];
    idx = arr.indexOf(target);
    while(idx !== -1){
        result.push(idx);
        idx = arr.indexOf(target, ++idx);
        
    }
    return result;
}

解法二:
查找target的位置,只需要将数组arr中键值对key-value中value == target的key找出来存到新数组而已。因此,遍历arr,如果target == arr[i],i即目标值位置,则将i加入到a数组中。

function findAllOccurrences(arr, target) {
    var a = [];
    for(var i = 0; i < arr.length; i++){
        if(target == arr[i])
            a.push(i);
    }
    return a;
}

函数定义规范

题目描述
请修复给定的 js 代码中,函数定义存在的问题

输入例子:
functions(true)

输出例子:
a

需要改进的代码

function functions(flag) {
    if (flag) {
      function getValue() { return 'a'; }
    } else {
      function getValue() { return 'b'; }
    }

    return getValue();
}

上面这种写法,存在兼容性问题,不同浏览器会不同的解析。
function表示定义,会在所有代码执行前执行定义。有的浏览器可能就会因getValue被重写。
(var、function都代表定义。)
改进一:

function functions(flag) {
    function getValue() { return(flag)?'a':'b'; }
    return getValue();
}

改进二:
else中的语句相当于将if中的function重写,因此无论flag为何值,返回的方法始终为重写后的方法。将方法赋值给一个变量,方法就不会被重写,因此才能得到正确的结果。

function functions(flag) {
    if (flag) {
      var getValue = function () { return 'a'; }
    } else {
      var getValue = function () { return 'b'; }
    }
    return getValue();
}
posted @ 2016-04-05 16:31  Sameen  阅读(129)  评论(0)    收藏  举报