数据处理 小栗子

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));
}

 

posted @ 2018-07-03 10:51  章鱼樟  阅读(191)  评论(0编辑  收藏  举报