前端学习之JavaScript(二)

1、今天在做题的时候有一道题是这样的,移除第一位元素并返回第一个元素的值。

用shift可以移除第一位元素并且返回第一位元素的值,所以只要 return arr.shift();就可以一举两得啦。

2、

任务

使用点操作符和中括号操作符来检索变量 myPlants 的第二棵树。

刚开始实在是不懂如何访问啊。。原来是这样。

myPlants[1].list[1];


3、hasOwnProperty

语法:

obj.hasOwnProperty(prop)
用于判断一个对象中是否含有此属性prop.


4、//Setup
var contacts = [
    {
        "firstName": "Akira",
        "lastName": "Laine",
        "number": "0543236543",
        "likes": ["Pizza", "Coding", "Brownie Points"]
    },
    {
        "firstName": "Harry",
        "lastName": "Potter",
        "number": "0994372684",
        "likes": ["Hogwarts", "Magic", "Hagrid"]
    },
    {
        "firstName": "Sherlock",
        "lastName": "Holmes",
        "number": "0487345643",
        "likes": ["Intriguing Cases", "Violin"]
    },
    {
        "firstName": "Kristian",
        "lastName": "Vos",
        "number": "unknown",
        "likes": ["Javascript", "Gaming", "Foxes"]
    }
];


function lookUp(firstName, prop){
// Only change code below this line
    for(var i=0;i<contacts.length;i++){
  if(contacts[i].firstName==firstName){
    if(contacts[i].hasOwnProperty(prop)){
      return contacts[i][prop];
    }else{
      return "No such property";
    }
  }
}
   return "No such contact";
}

// Only change code above this line

// Change these values to test your function
lookUp("Sherlock", "likes");


fcc这道题!原来一直错在红色标记部分。之前一直采用点操作符去访问对象,然而prop并不是对象数组中的一个属性,所以如果是return contacts[i].prop肯定一直访问不到啊我是咋想的。。用[ ]就解决了。。


5、

如果给定的字符串是回文,返回true,反之,返回false

如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。

注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。

函数参数的值可以为"racecar""RaceCar""race CAR"

当你完成不了挑战的时候,记得开大招'Read-Search-Ask'。

这道题对于String.replace这块儿我是不理解的。。可能是对于正则表达式的掌握太不够了这块知识需要恶补。


原来我的思路是这样的:

var newStr=str.replace(/[\ |\~|`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\|\.|\|\/|\?]/g,"");
  newStr=str.toLowerCase();
  var arr=newStr.split("");
  arr.reverse();
  reStr=arr.join("");
  if(newStr==reStr){
  return true;
  }else{
    return false;
  }

很麻烦。但是replace那块儿还是不明白,这是从网上COPY的说是可以去掉所有空格+符号的正则表达式(然而并没有成功)。所以以上的是通不了关的答案。

但是思路就是 去掉符号+空格。然后将字符串转为数组,再利用reverse()来将数组反转,反转后再将数组连在一起构成一个新的字符串,与原来的字符串比较,若是相等则就是回文。思路没毛病。。

后来搜网上大神的 大神(来自简书 少年VV)是这样写的:

由于这个代码是我初学JS的时候写的,非常不成熟,感谢评论区@S1ngS1ng指出的方法。非常简洁

function palindrome(str) {
  // 转换成小写用正则过滤掉符号
  var nStr = str.toLowerCase().replace(/[^a-z0-9]/g,"");
  //验证反转后是否相等
  return nStr.split("").reverse().join("") === nStr;
}

嗯然后这个是对的,又对又简洁。


6、想要马住一个找出最大值最小值的方法。好用!

//最小值
Array.prototype.min = function() {
var min = this[0];
var len = this.length;
for (var i = 1; i < len; i++){ 
if (this[i] < min){ 
min = this[i]; 
} 
} 
return min;
}
//最大值
Array.prototype.max = function() { 
var max = this[0];
var len = this.length; 
for (var i = 1; i < len; i++){ 
if (this[i] > max) { 
max = this[i]; 
} 
} 
return max;
}


7、今天做fcc网站的一道题,是让把字符串的所有首字母改成大写,其他字母为小写。

我的思路就是先把字符串变成数组,再将数组的 每个字符串都先变为小写,再将首字母变为大写。

第一开始我是这么写的:

function titleCase(str) {
  var arr=str.split(" ");
  var newArr=new Array();
  var myArr=new Array();
  var newStr;
  for(var i=0;i<arr.length;i++){
    newArr[i]=arr[i].toLowerCase();
    newArr[i]=newArr[i][0].toUpperCase();//其实原来这写的是newArr[i]=newArr[i].charAt(0).toUpperCase();如果是这句加上以下改进的语句也是对的。
  }
  newStr=newArr.join(" ");
  return newStr;
}
titleCase("I'm a little tea pot");

结果就是一直输出的是 I A L T P

只有各单词的首字母。。这就很尴尬了。后来百度了一下,看到大神们的方法真是超级多了,看了一个和我思路类似的,

原来需要将newArr[i]=newArr[i][0].toUpperCase();这一行改成 newArr[i]=newArr[i][0].toUpperCase()+newArr[i].substring(1,newArr[i].length);把其余的字母也加上,嗯这就过啦~


8、JS里不允许定义多维数组,所以就是嵌套数组。

所以[[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]可以看作一个二维数组。。

且这样的数组 arr.length就是行数,arr[0].length就是其中小数组的长度。

嗷,昨天一直难以理解JS的嵌套数组,后来经大神同学指点说这就是个二维数组嘛。这样想起来解题容易多了啊~

function largestOfFour(arr) {
  // You can do this!
  var myArr=new Array();
  for(var i=0;i<arr.length;i++){
    myArr[i]=findMax(arr[i]);
  }
   return myArr;
  }
function findMax(newArr){
  var max=newArr[0];
  for(var i=0;i<newArr.length;i++){
    if(newArr[i]>max){
      max=newArr[i];
    }
  }  
  return max;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

以上代码就是返回嵌套数组中每个数组的最大值并又组成了一个新数组。


9、fcc上的一道题:

检查一个字符串(str)是否以指定的字符串(target)结尾。

如果是,返回true;如果不是,返回false。

比较开心的是学到了JS的Str.substr()这个用法。

先看看W3Cschool上的定义:

定义和用法

substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。

语法

stringObject.substr(start,length)
参数描述
start必需。要抽取的子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。
length可选。子串中的字符数。必须是数值。如果省略了该参数,那么返回从 stringObject 的开始位置到结尾的字串。

返回值

一个新的字符串,包含从 stringObjectstart(包括 start 所指的字符) 处开始的 length 个字符。如果没有指定length,那么返回的字符串包含从 startstringObject 的结尾的字符。

(看MDN文档有时候真的一头雾水。。。。)

所以看明白了之后这道题就变的相当简单啦~因为题目要求不仅仅是对一个单词进行判断,还可能对多个单词组成的句子进行判断。并且判断的target的个数都是不确定的。

于是我就写了:

function confirmEnding(str, target) {
  // "Never give up and good luck will find you."
  // -- Falcor
  if(str.substr(-(target.length))==target){
    return true;
  }else{
    return false;
  }
}

confirmEnding("Bastian", "n");


substr(-1)指的是字符串最后一个字符,以此类推。


10、

猴子吃香蕉可是掰成好几段来吃哦!

把一个数组arr按照指定的数组大小size分割成若干个数组块。

例如:chunk([1,2,3,4],2)=[[1,2],[3,4]];

chunk([1,2,3,4,5],2)=[[1,2],[3,4],[5]];

最近学习状态不好啊。。总是神游搞啥。。。

这个题是网上参考来的:http://www.cnblogs.com/mr-wuxiansheng/p/6534910.html(来自这)

function chunk(arr, size) {
  // Break it up.
  var aArr=new Array();
  var bArr=new Array();
 for(var i=0;i<arr.length;i+=size){
   aArr=arr.slice(i,i+size);
   bArr.push(aArr);
   }
  return bArr;
}

11、

11.Slasher Flick 

打不死的小强!

返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始。

复制代码
function slasher(arr, howMany) {
  // it doesn't always pay to be first
  arr = arr.slice(howMany);
  return arr;
}

slasher([1, 2, 3], 2);


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值