1. 例如,如果第一个参数是 [{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }]
,第二个参数是 { last: "Capulet" }
,那么你必须从数组(第一个参数)返回其中的第三个对象,因为它包含了作为第二个参数传递的属性-值对。
1 function where(collection, source) { 2 var arr = []; 3 collection.filter(function(ele){ 4 var flag = false; 5 for(var inx in source) { 6 if (ele.hasOwnProperty(inx) && ele[inx]==source[inx]){ 7 flag = true; 8 } else if(ele.hasOwnProperty(inx) && ele[inx]!=source[inx]){ 9 flag = false; 10 } else if(!ele.hasOwnProperty(inx)){ 11 flag = false; 12 } 13 } 14 if(flag) { 15 arr.push(ele); 16 } 17 }); 18 return arr; 19 } 20 21 where([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" , first: "Tybalt"});
// 返回 [{ first: "Tybalt", last: "Capulet" }]
2. 给一个正整数num
,返回小于或等于num
的斐波纳契奇数之和。
斐波纳契数列中的前几个数字是 1、1、2、3、5 和 8,随后的每一个数字都是前两个数字之和。
例如,sumFibs(4)应该返回 5,因为斐波纳契数列中所有小于4的奇数是 1、1、3。
1 function sumFibs(num) { 2 var arr = [1, 1, 2, 3, 5]; 3 // 奇数数组 4 var odd = arr.filter(function(a) { 5 var remainder = a % 2; 6 return remainder > 0; 7 }); 8 // 补充斐波纳契数 9 if (num > odd.pop()) { 10 var addNUm = 0; 11 var flag = 1; 12 for(var i = 0; i < flag; i++) { 13 addNUm = arr[arr.length - 1] + arr[arr.length - 2]; 14 arr.push(addNUm); 15 flag += 1; 16 if (addNUm > num) { 17 console.log(i); 18 flag = 0; 19 } 20 } 21 console.log(arr[arr.length-1]); 22 } 23 // 重新获取奇数数组 24 odd = arr.filter(function(a) { 25 var remainder = a % 2; 26 return remainder > 0; 27 }); 28 29 var result = odd.filter(function(a) { 30 return a <= num; 31 }); 32 33 var sum = 0; 34 result.filter(function(a) { 35 sum += a; 36 }); 37 return sum; 38 } 39 40 sumFibs(5);
3. 返回给定数字范围内的质数之和
1 function sumPrimes(num) { 2 3 var result = []; 4 5 for(var i = 1; i <= num; i++) { 6 if(i != 1) { 7 var flag = true; 8 for(var s = 2; s <= parseInt(i/2); s++) { 9 if(i%s == 0){ 10 flag = false; 11 } 12 } 13 if (flag) result = result.push(i); 14 } 15 } 16 var sum = 0; 17 result.filter(function(a){ 18 sum += a; 19 }); 20 return sum; 21 } 22 23 sumPrimes(10);
4. 穷举
1 function getPermutation(arr) { 2 if(arr.length == 1){ 3 return [arr] 4 } 5 var result = []; 6 for (var s = 0; s < arr.length; s++) { 7 var firstNum = arr[s]; 8 var clone = arr.slice(0); 9 clone.splice(s,1); 10 var childPermAlone = getPermutation(clone); 11 for(var i = 0; i < childPermAlone.length; i++) { 12 childPermAlone[i].unshift(firstNum); 13 } 14 result = result.concat(childPermAlone); 15 } 16 return result; 17 }
5. sleep
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, milliSeconds));
}