一些题
来源:互联网 发布:福建公安便民网络 编辑:程序博客网 时间:2024/06/07 14:14
移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回
方法一:
function removeWithoutCopy(arr, item) {
for(var i=0;i<arr.length;i++){
if(arr[i]==item){
arr.splice(i-1,1);
i--;
}
}
return arr;
}
removeWithoutCopy([1, 2, 2, 3, 4, 2, 2],2);
方法二:
var
append =
function
(arr, item) {
var
length = arr.length,
newArr = [];
for
(
var
i = 0; i < length; i++) {
newArr.push(arr[i]);
}
newArr.push(item);
return
newArr;
};
方二:
/**
* 使用slice浅拷贝+push组合
* @param arr
* @param item
* @returns {Blob|ArrayBuffer|Array.<T>|string}
*/
var
append2 =
function
(arr, item) {
var
newArr = arr.slice(0);
// slice(start, end)浅拷贝数组
newArr.push(item);
return
newArr;
};
/**
* 使用concat将传入的数组或非数组值与原数组合并,组成一个新的数组并返回
* @param arr
* @param item
* @returns {Array.<T>|string}
*/
var
append3 =
function
(arr, item) {
return
arr.concat(item);
};
在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组
var arr1=[item];
return arr1.concat(arr);
}
prepend([1, 2, 3, 4], 10);
function prepend(arr, item) {
//将arr数组复制给a
var a = arr.slice(
0
);
//使用unshift方法向a开头添加item
a.unshift(item);
return
a;
}
找出数组 arr 中重复出现过的元素
function duplicates(arr) {
var new_arr = arr.sort();//先把arr排序
var res = [] ;//目标容器
for( var i = 0 ; i < new_arr.length ; i++){
if(new_arr[i] == new_arr[i+1] && new_arr[i] !=new_arr[i-1]){//判断是否重复,是否已经放入容器
res.push(new_arr[i]);
}
}
return res;
}
方二
function
duplicates(arr) {
var
result = [];
arr.forEach(
function
(elem){
if
(arr.indexOf(elem) !=arr.lastIndexOf(elem) && result.indexOf(elem) == -1){
result.push(elem);
}
});
return
result;
}
duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3]);
// console.log("11112");
arr.sort();
var result=[];
var now;
for(var i=0;i<arr.length;i++){
now=arr[i];
if(result.indexOf(now)==-1){
console.log(now);
for(var j=i+1;j<arr.length;j++){
if(arr[j]==now){
result.push(now);
break;
}
}
}
}
console.log(result);
return result;
}
duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3]);
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){
console.log(start++);
}
else
{
clearInterval(timer);
}
},
100
);
//返回一个对象
return
{
cancel : function(){
clearInterval(timer);
}
};
}
方二:(自己写的)
function count(start, end) {
var now=start;
console.log(now);
var time=setInterval(function(){
if(now<end){
now++;
console.log(now);
}else{
clearInterval(time);
}
},100)
this.cancel=function(){
clearInterval(time);
}
return this;
}
function
count(start, end) {
if
(start <= end){
console.log(start);
start++;
st = setTimeout(
function
(){count(start, end)}, 100);
}
return
{
cancel:
function
(){clearTimeout(st);}
}
}
1、如果 num 能同时被 3 和 5 整除,返回字符串 fizzbuzz
2、如果 num 能被 3 整除,返回字符串 fizz
3、如果 num 能被 5 整除,返回字符串 buzz
4、如果参数为空或者不是 Number 类型,返回 false
5、其余情况,返回参数 num
if(typeof num!="number"||typeof num=="object"){
return false;
}else if(num%3==0&&num%5==0){
return "fizzbuzz";
}else if(num%3==0){
return "fizz";
}else if(num%5==0){
return "buzz";
}else{
return num;
}
}
fizzBuzz(15);
//apply
function
speak(fn, obj) {
return
fn.apply(obj);
}
方法二:
//call
function
speak(fn, obj) {
return
fn.call(obj);
}
方法三:
//bind
function
speak(fn, obj) {
return
fn.bind(obj)();
}
题目描述
1、返回一个函数数组 result,长度与 arr 相同
2、运行 result 中第 i 个函数,即 result[i](),结果与 fn(arr[i]) 相同
var result=[];
for(var i=0;i<arr.length;i++){
result.push(function(){
return result;
}
var result=[];
for(var i=0;i<arr.length;i++){
(function(i){
result.push(function(){
return fn(arr[i]);
});
})(i)
}
return result;
}
makeClosures([1, 2, 3], function (x) {
return x * x;
});
function
makeClosures(arr, fn) {
var
result =
new
Array();
for
(let i=0;i<arr.length;i++){
result[i] =
function
(){
return
fn(arr[i]);
//let声明的变量只在let所在代码块内有效,因此每次循环的i都是一个新的变量
};
}
return
result;
}
//参考《JavaScript高级程序设计》的典型方法
function
makeClosures(arr, fn) {
var
result =
new
Array();
for
(
var
i=0;i<arr.length;i++){
result[i] =
function
(num){
return
function
(){
return
fn(num);
}
}(arr[i]);
}
return
result;
}
方法四:
//使用forEach()
function
makeClosures(arr, fn) {
var
result =
new
Array();
arr.forEach(
function
(curr){
result.push(
function
(){
return
fn(curr)});//注这个的curr每一个都是不同的
})
return
result;
}
方法五:
//使用ES5的bind()方法
function
makeClosures(arr, fn) {
var
result =
new
Array();
for
(
var
i=0;i<arr.length;i++){
result[i] = fn.bind(
null
,arr[i]);
}
return
result;
}
题目描述
1、返回一个函数 result,该函数接受一个参数
2、执行 result(str3) ,返回的结果与 fn(str1, str2, str3) 一致
输入
var sayIt = function(greeting, name,punctuation) { return greeting + ', '+ name + (punctuation || '!'); }; partial(sayIt, 'Hello', 'Ellie')('!!!');
输出
Hello, Ellie!!!
方一:
function partial(fn, str1, str2) {
var result;
result=function(str3){
return fn(str1,str2,str3);
}
return result;
}
var sayIt = function(greeting, name, punctuation) {
return greeting + ', ' + name + (punctuation || '!');
};
partial(sayIt, 'Hello', 'Ellie')('!!!');
方法二:(并不懂这里用call是为了什么感觉多此一举,因为根据作用域链,是可以直接获取到str1和str2的)
// call
function
partial(fn, str1, str2) {
function
result(str3) {
return
fn.call(
this
, str1, str2, str3);
}
return
result;
}
// apply(这里只是为了对照)
function
partial(fn, str1, str2) {
function
result(str3) {
return
fn.apply(
this
, [str1, str2, str3]);
}
return
result;
}
// 这个bind会生成一个新函数对象, 它的str1, str2参数都定死了, str3未传入, 一旦传入就会执行
function
partial(fn, str1, str2) {
return
fn.bind(
this
, str1, str2);
// 或 return fn.bind(null, str1, str2);
}
// bind同上, 多了一步, 把str3传入的过程写在另一个函数里面, 而另一个函数也有str1, str2参数
function
partial(fn, str1, str2) {
function
result(str3) {
return
fn.bind(
this
, str1, str2)(str3);
}
return
result;
}
// 匿名函数
function
partial(fn, str1, str2) {
return
function
(str3) {
return
fn(str1, str2, str3);
}
}
方法六:
// ES6
const partial = (fn, str1, str2) => str3 => fn(str1, str2, str3);
使用arguments
题目描述
var sum=0;
for(var i=0;i<arguments.length;i++){
sum+=arguments[i];
}
return sum;
}
useArguments(1, 2, 3, 4);
function
useArguments() {
var
arr=Array.prototype.slice.call(arguments)
//把arguments类数组转化为数组,转化为数组后才可以用数组的方法。
return
eval(arr.join(
"+"
));
//求和
}
function
useArguments() {
var
result = Array.prototype.reduce.call(arguments,
function
(a,b){
return
a+b;});
return
result;
}
方法四:
function useArguments() {
return
Array.prototype.slice.call(arguments).reduce(function(pre,cur,i,a){
return
pre + cur;
});
}
使用apply调用函数
题目描述
1、返回的结果为调用 fn 之后的结果
2、fn 的调用参数为 callIt 的第一个参数之后的全部参数
- 一些题
- [ 一些题 ]
- 一些题
- 【一些题】一些重要函数的实现
- 一些笔试题
- 一些笔试题
- 一些智力测试题
- java一些题
- 一些数据推理题
- 一些变态笔试题
- 一些笔试题
- 一些益智题
- 一些笔试题收集
- 一些 C++ 自测题
- 一些C语言题
- 一些笔试题总结
- 一些算法题
- .net一些题01
- hdu 2055 An easy problem
- C语言——实例013 水仙数
- 程序猿生活大爆炸
- hdu 2057 A + B Again
- spring cloud 之eureka-server
- 一些题
- 7.约束
- bzoj2434 阿狸的打字机 fail树+树状数组
- pandas官方文档中cookbook(2)的split&building criteria翻译
- 基于pycaffe从零开始写mnist(第三篇)——生成deploy.prototxt,做最后的验证
- 多种方法实现多态!!!
- WebSacrab与SQL注入
- [ifrog] Round #19 B -- Buildings
- 【笔试题】CVTE C++开发岗笔试题7.29