作者:yanyige | 发布时间:2017-04-22 10:25

题目描述

计算给定数组 arr 中所有元素的总和

输入描述: 数组中的元素均为 Number 类型

input: sum([ 1, 2, 3, 4 ])

output: 10

function sum(arr) {
    return arr.reduce(function(prev, curr, index, arr) {
        return prev + curr;
    });
};

题目描述

找出元素 item 在给定数组 arr 中的位置

输入描述: 如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1

input: indexOf([ 1, 2, 3, 4 ], 3)

output: 2

function indexOf(arr, item) {
	return(arr.indexOf(item));
}

题目描述

移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组

input: remove([1, 2, 3, 4, 2], 2)

output: [1, 3, 4]

function remove(arr, item) {
    return arr.filter(function(x) { return x !== item; });
}

题目描述

移除数组 arr 中的所有值与item相等的元素,直接在给定的arr数组上进行操作,并将结果返回

removeWithoutCopy([1, 2, 2, 3, 4, 2, 2], 2)

[1, 3, 4]

function removeWithoutCopy(arr, item) {
	for(var i = 0; i < arr.length; i ++) {
        if(arr[i] == item) {
            arr.splice(i, 1);
            i --;
        }
    }
    return arr;
}

题目描述

在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组

prepend([1, 2, 3, 4], 10)

[10, 1, 2, 3, 4]

function prepend(arr, item) {
    var _arr = arr.slice(0);
	return _arr.unshift(item), _arr;
}
//利用concat
function prepend(arr, item) {
    return [item].concat(arr);
}
//使用push.apply
function prepend(arr, item) {
    var newArr=[item];
    [].push.apply(newArr, arr);
    return newArr;
}
//利用slice+unshift/splice
function prepend(arr, item) {
    var newArr=arr.slice(0);
    newArr.unshift(item);//newArr.splice(0,0,item);
    return newArr;
}
//使用join+split+unshift/splice组合
function prepend(arr, item) {
    var newArr=arr.join().split(',');
    newArr.unshift(item);//newArr.splice(0,0,item);
    return newArr;
}
//普通的迭代拷贝
function prepend(arr, item) {
    var newArr=[];
    for(var i=0;i<arr.length;i++){
        newArr.push(arr[i]);
    }
    newArr.unshift(item);
    return newArr;
}

题目描述

找出数组 arr 中重复出现过的元素

duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3]).sort()

[1, 3, 4]

function duplicates(arr) {
    var ret = [];
	arr.sort();
    arr.map(function(item, idx, arr) {
        if(arr.indexOf(item) != arr.lastIndexOf(item) && ret.indexOf(item) == -1) {
            ret.push(item);
        }
    });
    return ret;
}

题目描述

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

findAllOccurrences(‘abcdefabc’.split(‘’), ‘a’).sort()

[0, 6]

function findAllOccurrences(arr, target) {
	var _arr = arr.map(function(item, index) {
        return item == target ? index : -1;
    })
    return _arr.join('').replace(/-1/g, "").split("");
}

题目描述

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

functions(true)

a

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

    return getValue();
}

题目描述

实现一个打点计时器,要求

  1. 从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log一个数字,每次数字增幅为 1
  2. 返回的对象中需要包含一个 cancel 方法,用于停止定时操作
  3. 第一个数需要立即输出
function count(start, end) {
    console.log(start ++);
	var timer = setInterval(function() {
        if(start >= end) {
            clearInterval(timer);
        }
        console.log(start ++);
    }, 100);
    return {
        cancel : function() {clearInterval(timer);}
    }
}