频道栏目
首页 > 资讯 > JavaScript > 正文

[FreeCodeCamp-JavaScript]IntermediateAlgorithm

17-08-21        来源:[db:作者]  
收藏   我要投稿

在freecodecamp上学习js进行到中级算法部分了,这里记录一下,方便后面查看。
1.Sum All Numbers in a Range
我们会传递给你一个包含两个数字的数组。返回这两个数字和它们之间所有数字的和。
最小的数字并非总在最前面。

注意:

Math.min(val1[,val2,……,valn]),返回元素val1,val2,……valn中的最小值 Math.max(val1[,val2,……,valn]),返回元素val1,val2,……valn中的最大值

arr.reduce(callback,[initialValue])

callback执行数组中每个值的函数,包含四个参数(previousValue, currentValue, index, array) previousValue指上一次调用回调返回的值,或者是提供的初始值(initialValue) currentValue数组当前处理的元素 index当前元素在数组中的索引 array调用reduce的数组 initialValue可选,作为第一次调用callback第一个参数 [0,1,2,3,4].reduce(function(previousValue, currentValue, index, array){
return previousValue + currentValue;
});————–返回10=0+1+2+3+4 [0,1,2,3,4].reduce(function(previousValue, currentValue, index, array){
return previousValue + currentValue;
}, 10);返回20=10+0+1+2+3+4 这个函数的使用暂时还不太熟,像这里提示中给出了这个函数,但我没用,后面要加强学习
function sumAll(arr) {
  //存储最后返回的值
  var num=0;
  //挑选出arr数组中较小的值,作为循环的起点
  var i=Math.min(arr[0],arr[1]);
  //挑选出arr数组中较大的值,作为循环的终点
  while(i<=Math.max(arr[0],arr[1])){
    num+=i;
    i++;
  } 
  return num;  
}

sumAll([1, 4]);

2.Diff Two Arrays
比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素。换言之,返回两个数组的差异。

function diff(arr1, arr2) {
  var newArr = [];
  // Same, same; but different.
  //在arr2中挑出arr1中没有的元素
  var a1=arr1.filter(function(item,index,array){
    return (arr2.indexOf(item)<0);
  });
  //在arr1中挑出arr2中没有的元素
  var a2=arr2.filter(function(item,index,array){
    return (arr1.indexOf(item)<0);
  });
  //合并数组中各自独有的部分a1和a2
  newArr=a1.concat(a2); 
  return newArr;
}

diff([1, 2, 3, 5], [1, 2, 3, 4, 5]);

3.Roman Numeral Converter
将给定的数字转换成罗马数字。
所有返回的 罗马数字 都应该是大写形式。

分析:

这里首先要定义好数字和罗马数字之间的对应数组romanMatrix 采用递归的方法 这个题目比较有亮点,后期还需要复习
//定义部分数字和罗马数字之间的对应关系数组
var romanMatrix=[
  [1000,'M'],
  [900,'CM'],
  [500,'D'],
  [400,'DC'],
  [100,'C'],
  [90, 'XC'],
  [50, 'L'],
  [40, 'XL'],
  [10, 'X'],
  [9, 'IX'],
  [5, 'V'],
  [4, 'IV'],
  [1, 'I']
];
function convert(num) {
  //给定数字为0时,返回空值
  if(num===0)
    return '';
  //递归找出给定数字对应的罗马数字
  for(var i=0;i=romanMatrix[i][0])
      return romanMatrix[i][1]+convert(num-romanMatrix[i][0]);
  }
}

convert(88);

4.Where art thou
写一个 function,它遍历一个对象数组(第一个参数)并返回一个包含相匹配的属性-值对(第二个参数)的所有对象的数组。如果返回的数组中包含 source 对象的属性-值对,那么此对象的每一个属性-值对都必须存在于 collection 的对象中。
例如,如果第一个参数是 [{ first: “Romeo”, last: “Montague” }, { first: “Mercutio”, last: null }, { first: “Tybalt”, last: “Capulet” }],第二个参数是 { last: “Capulet” },那么你必须从数组(第一个参数)返回其中的第三个对象,因为它包含了作为第二个参数传递的属性-值对。
分析:

先循环保存source中key值和对应value值 再在collection中遍历比较collection[i]中对应key值和value值是否与source中的相等 若相等,就push到arr数组中,最终返回arr
function where(collection, source) {
  var arr = [];
  // What's in a name?
  //循环保存source中key值
  var key_val="";
  //循环保存source中key值对应value,即source[key]
  var value_val="";
  //循环取出source中key和value
  for(var key in source){
    key_val=key;
    value_val=source[key];
  }
  //循环比较collection中是否包含value=source[key]
  for(var i=0;i

5.Search and Replace 使用给定的参数对句子执行一次查找和替换,然后返回新句子。 第一个参数是将要对其执行查找和替换的句子。 第二个参数是将被替换掉的单词(替换前的单词)。 第三个参数用于替换第二个参数(替换后的单词)。 注意:替换时保持原单词的大小写。例如,如果你想用单词 “dog” 替换单词 “Book” ,你应该替换成 “Dog”。

//判断字符串str中首字符是否大写
function isFirstUpper(str){
  if(str.charAt(0)==str.charAt(0).toUpperCase())
    return true;
  else
    return false;
}
//将字符串str中首字符替换成大写形式
function firstToUpper(str){
  return str.replace(str.charAt(0),str.charAt(0).toUpperCase());
}
function myReplace(str, before, after) {  
  //如果即将被替换的单词before中首字符为大写形式
  //则将替换before的单词after首字符替换成大写形式
  if(isFirstUpper(before)){
    after=firstToUpper(after);
  }
  //将str中目标单词before用after替换
  str=str.replace(before,after);
  return str;
}

myReplace("A quick brown fox Jumped over the lazy dog", "Jumped", "leaped");

6.Pig Latin
把指定的字符串翻译成 pig latin。
Pig Latin 把一个英文单词的第一个辅音或辅音丛(consonant cluster)移到词尾,然后加上后缀 “ay”。
如果单词以元音开始,你只需要在词尾添加 “way” 就可以了。

function translate(str) {
  //定义元音字母组成的字符数组
  var vowel=['a','e','i','o','e'];
  //保存str中开头的辅音丛的长度
  var i=0;
  var newstr=str;
  //循环求出字符串str中开头的辅音丛的长度i
  while(i

7.DNA Pairing DNA 链缺少配对的碱基。依据每一个碱基,为其找到配对的碱基,然后将结果作为第二个数组返回。 Base pairs(碱基对) 是一对 AT 和 CG,为给定的字母匹配缺失的碱基。 在每一个数组中将给定的字母作为第一个碱基返回。 例如,对于输入的 GCG,相应地返回 [[“G”, “C”], [“C”,”G”],[“G”, “C”]] 字母和与之配对的字母在一个数组内,然后所有数组再被组织起来封装进一个数组。

function pair(str) {
  //以碱基对的配对关系定义map键值对
  var map={
    'A':'T',
    'T':'A',
    "G":'C',
    'C':'G'
   };
  var arr=[];
  var i=0;
  var len=str.length;
  while(i

8.Missing letters 从传递进来的字母序列中找到缺失的字母并返回它。 如果所有字母都在序列中,返回 undefined。

function fearNotLetter(str) {
  var len=str.length;
  //str中第一个字符的Unicode值
  var start=str.charCodeAt(0);
  //str中最后一个字符的Unicode值
  var end=str.charCodeAt(len-1);
  var arr=[];
  var j=0;
  for(var i=start;i<=end,j

9.Boo who 检查一个值是否是基本布尔类型,并返回 true 或 false。 基本布尔类型即 true 和 false。 注意: typeof operand

typeof操作符返回操作数的类型(字符串) operand是一个表达式,表示对象或原始值,返回其类型 例如:typeof 3.14 === ‘number’;typeof “bla” === ‘string’;typeof true === ‘boolean’; typeof new String(“abc”) === ‘object’;typeof Math.sin === ‘function’; typeof undefined === ‘undefined’;typeof [1, 2, 4] === ‘object’;
function boo(bool) {
  // What is the new fad diet for ghost developers? The Boolean.
  //typeof bool 返回bool的类型,即boolean
  return typeof bool==='boolean';
}

boo(1);

10.Sorted Union
写一个 function,传入两个或两个以上的数组,返回一个以给定的原始数组排序的不包含重复值的新数组。
换句话说,所有数组中的所有值都应该以原始顺序被包含在内,但是在最终的数组中不包含重复值。
非重复的数字应该以它们原始的顺序排序,但最终的数组不应该以数字顺序排序。
总结:

arguments很神奇,可以直接检索到函数中传递的参数个数 arr.indexOf(char),功能上类似于java中的contains函数 可以用于查找arr数组中是否包含某个char元素,有就返回对应索引;没有就返回-1
function unite() {
  var arr=[];
  //unite中参数总数目(即数组个数)
  var len=arguments.length;
  //控制遍历哪个数组(arguments[i],i可取0~len-1)
  var i=0;  
  while(i
相关TAG标签
上一篇:微信开发教程之申请服务器资源
下一篇:mysql索引问题
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站