1.写一个sum函数使以下两种调用方式都正确
sum(2,3)//5
sum(2)(3)//5
function sum(x,y){
let a=x
let b=y
if(y===undefined){
return function(x){
return a+x
}
}else{
return a+b
}
}
拓展
function sum2(...x){
if(arguments.length>1){
let s=0
for(let i=0;i<arguments.length;i++){
s+=arguments[i]
}
return s
}else{
let a=arguments[0]
console.log(a)
var add=function(y){
x=a+y
return add
}
return add
}
}
console.log(sum2(2,3,4))
console.log(sum2(2)(3)(5))
es6
const add = (...args)=> {
let sum = args.reduce((pre,crt)=> pre +crt);
const accu = (...args2)=> {
sum += args2.reduce((pre,crt)=>pre+crt);
return accu;
}
accu.valueOf=()=>sum;
return accu;
}
console.log(add(2)(3)(4).valueOf())
ps:function的arguments是类数组对象(只有length,不能使用数组方法),ES6的rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
2.数组去重
let arr=[1,4,4,"a","a"]
let newArr=Array.from(new.set(arr))
//indexOf
//indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1
function uniqueArr(arr){
let newArr=[]
for(let i=0;i<arr.length;i++){
if(newArr.indexOf(arr[i])===-1){
newArr.push(arr[i])
}
}
return newArr
}
//splice
function uniqueArr(arr){
for(let i=0;i<arr.length;i++){
for(let j=i+1;j<arr.length;j++){
if(arr[i]==arr[j]){
console.log(1)
arr.splice(j,1)
}
}
}
return arr
}
3.分别实现两个函数,返回两个数组的并集和交集
交集 let intersectionArr = a.filter(function(v){ return b.indexOf(v) > -1 })
并集 let unionArr= a.concat(b.filter(function(v){ return !(a.indexOf(v) > -1)}));
function handleArr(arr1,arr2){
let unionArr=[]
let intersectionArr=[]
for(let i=0;i<arr1.length;i++){
for(let j=0;j<arr2.length;j++){
if(arr1[i]==arr2[j]){
intersectionArr.push(arr1[i])
arr2.splice(j,1)
}
}
}
unionArr=arr1.concat(arr2)
return [ unionArr, intersectionArr]
}
网友评论