JavaScript练习笔记整理·4 - 6.26

基础练习(1):

我的解答为:
function getMiddle(s) {
  if(s.length%2 == 0) {
    return s.charAt(s.length/2-1)+s.charAt(s.length/2);
  } else {
    return s.charAt(s.length/2);
  }
}

较优解答为:

function getMiddle(s)
{
  return s.substr(Math.ceil(s.length / 2 - 1), s.length % 2 === 0 ? 2 : 1);
}

 

分析:
我的做法是先判断字符串的长度,根据长度来选择需要返回的字符。而较优解中使用了substr()方法、Math.ceil()方法以及一个三元运算符。substr()方法可以创建新字符串、Math.ceil()方法用于对一个数进行上舍入。
 
笔记:
charAt()方法,是用于访问字符串中特定字符的方法,以单字符字符串的形式返回给定位置的那个字符,接收一个参数,即基于0的字符位置。
 
substr()方法,是基于自字符串创建新字符串的方法,返回被操作字符串的一个子字符串,且接收一或两个参数,第一个参数指定子字符串的开始位置,第二个参数表示子字符串到哪里结束。substr()的第二个参数指定的是返回的字符个数。若没有传递第二个参数,则将字符串的末尾作为结束位置。对原字符串没用影响。

基础练习(2):

我的解答为:
var uniqueInOrder=function(iterable){
  var newarr = [];
  for(var i=0;i<iterable.length;i++) {
    if(iterable[i] !== iterable[i+1]) {
      newarr.push(iterable[i]);
    }
  }
  return newarr;
}

较优解答一:

function uniqueInOrder(it) {
  var result = []
  var last
 
  for (var i = 0; i < it.length; i++) {
    if (it[i] !== last) {
      result.push(last = it[i])
    }
  } 
  return result
}

较优解答二:

var uniqueInOrder = function (iterable)
{
  return [ ].filter.call(iterable, (function (a, i) { return iterable[i - 1] !== a }));
}

 

分析:
我的思路是基于当前字符串的判断,判断每一位与其下一位是否相等,若相等,则添加到新数组中。而较优解中则是,先设定新数组中一个值作为判定基础,若是字符串中与数组中的值不相等,则添加到新数组中。
 
PS:今天的状态很差,心态上有一些比较消极的情绪,所以做的练习也少了,笔记也少了一些。(懒惰)
 
 
posted @ 2017-06-26 10:57  omoc  阅读(294)  评论(0编辑  收藏  举报