编程题

目录

数组中找重复

题目描述
找出数组 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 @   Sameen  阅读(125)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示