数组、字符串&函数-Assignment

1.数组方法里push、pop、shift、unshift、join、split分别是什么作用

新建一个数组

var array= new Array(1,"hello","world")
  • 添加数组元素功能
    • push方法:可向数组末尾添加1个或多个元素,并返回新的数组长度
array.push("!")//4
array//[1, "hello", "world", "!"]
  • unshit方法:可以向数组开头添加1个或多个元素,并返回新的数组长度
array.unshift("0")//5
array//["0", 1, "hello", "world", "!"]
  • 删除数组元素功能
    • pop方法:删除并返回数组最后一个元素,如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值
array.pop()//"!"
array//["0", 1, "hello", "world"]
  • shift方法:删除第一个元素,并返回第一个元素的值
array.shift()//"0"
array//[1, "hello", "world"]
  • 添加与删除数组元素的整合方法
    • arrayobject.splice(index,howmany,item1,.....,itemX):indext表示添加或删除元素的起始位置,howmany表示添加或删除的数量,itemX表示添加数组元素的内容,最后返回删除的元素内容
array//[1, "hello", "world"]
array.splice(1,2,"你好","生活")//["hello", "world"]
array//[1, "你好", "生活"]
  • 其他方法
    • join()方法:是把数组中的所有元素放入一个字符串,并通过分隔符把所有元素隔开,分隔符的类型是可选的,最终返回一个字符串
array.join("---")//"1---你好---生活"

2. 数组类

  • 用 splice 实现 push、pop、shift、unshift方法
var array = new Array (1,"hello","world");
  • 1.splice()与push()
array.push("!")等价于array.splice(3,0,"!")
  • 2.splice()与pop()
array.pop()等价于array.splice(2,1)
  • 3.splice()与unshift()
array.unshift("good")等价于array.splice(0,0,"good")
  • 4.splice()与shift()
array.shift()等价于array.splice(0,1)
  • 使用数组拼接出如下字符串
//思路:
//1.先建立数组arr,将所有元素输入数组;
//2.在使用for或者for in进行遍历
var prod = {
    name: '女装',
    styles: ['短款', '冬季', '春装']
};
function getTplStr(data){
    var i,arr = [];
    for(i=0;i<data.styles.length;i++){
    arr.push("<dt>" + data.styles[i] + "</dt>\n")
    }
//for (key in data.styles){"<dt>" + data.styles[key] + "</dt>\n"}
//另一种遍历数组方法
    arr.unshift('<dl class="product">\n');
    arr.splice(1,0,"<dt>"+data.name+"</dt>\n")
    arr.push("</dl>")
    return arr.join("");
}
var result = getTplStr(prod);
console.log(result)
  • 写一个find函数,实现下面的功能
//思路1:
//利用数组的继承自原型对象的indexOf()方法,可以返回某个值表示是否属于数组
var arr = [ "test", 2, 1.5, false ]
function find(array,value){
    var testValue;
    testValue = array.indexOf(value)
    console.log(testValue)
}
find(arr,"test")        
find(arr, false)
find(arr, 0) 

//思路2:
//利用for in 去遍历数组元素是否与输入值相一致的思维
var arr = [ "test", 2, 1.5, false ]
function find(array,value) {
    var index=-1,key;
  if (!!array && array.length > 0)
    for ( key in array){
      if (value === array[key]){
          index = key;
      } 
     }
  else{
    console.log("Not a Array or Array.length <=0")
  }
     console.log(index)
}                 
  • 写一个函数filterNumeric,实现如下功能
//思路
//1.传入一个数组入函数
//2.遍历数组,如果数组元素是数值型则push进入定义的新数组nArr
//3.输出数组
【注】数组的方法在处理删除“当前的某个元素”操作在下面一道题有另一种思路,这里主要方法是通过新建一个空数组+push()的方法实现该需求
arr = ["a", 1,3,5, "b", 2];
newarr = filterNumeric(arr);
console.log(newarr)
function filterNumeric(array){
  var i,nArr=[];
  for (i=0;i<array.length;i++){
    if(typeof array[i] === "number" ){
      nArr.push(array[i])
    }
  }
  return nArr
}
  • 对象obj有个className属性,里面的值为的是空格分割的字符串(和html元素的class特性类似),写addClass、removeClass函数,有如下功能:
//思路
//1.输入的clasName要和数组元素进行匹配
//如果className和第1个元素同名,则停止运行函数,并返回XXX已存在
//否则className和第2个元素进行匹配,若同名停止运行函数,并返回XXX已存在
//一直匹配下去,直到匹配到最后1个元素,
//如果与所有数组元素均不同名,则使用XXX.push(classContent)
var obj = {
  className: 'open menu new'
}
function addClass(obj,classContent){
  
  var objArr,key,i;
  objArr = obj.className.split(" ")
  for (i=0;i<objArr.length;i++){
    if (classContent === objArr[i]){
      console.log(classContent+"已存在")
      break;
    }
  }
  if (i === objArr.length){
      objArr.push(classContent)
    }    
  obj.className = objArr.join(" ")
     console.log(obj.className)
}
addClass(obj,"open")

-----------------------------------------------------------
function removeClass(obj,classContent){
  var objArr,key,i;
  objArr = obj.className.split(" ")
  for (i=0;i<objArr.length;i++){
    if (classContent === objArr[i]){
      objArr.splice(i,1)
      break;
     }
  }
  if (i === objArr.length){
    console.log(classContent+"不存在")
  }
   obj.className = objArr.join(" ")
   console.log(obj.className)
}
removeClass(obj,"new")
  • 写一个camelize函数,把my-short-string形式的字符串转化成myShortString形式的字符串,如
camelize("my-short-string")
camelize("background-color")
camelize("list-style-image")
function camelize(str){
  var i,strArr,midArr,upCaseFL,finalArr
  strArr = str.split("-") //strArr = ["my","short","string"]
  if (strArr.length > 1){
    for (i=1;i<strArr.length;i++){
      midArr = strArr[i].split("")//midArr = ["s","h","o","r","t"]
       upCaseFL = midArr[0].toUpperCase();//unCaseFL = "S"
       midArr.splice(0,1,upCaseFL)
       finalArr = midArr.join("")//finalArr = "Short"
       strArr[i] = finalArr//str[1] = "Short"
    }
  }
  return strArr.join("")//"myShortString"
}
  • 如下代码输出什么?为什么?
arr[arr.length-1]() 
输出结果:
控制台输出:hello hunger valley
弹出窗口显示:undefined
上述代码的执行过程为:
1.向数组arr的最后一个下标添加一个函数
2.arr[arr.length-1]()为读取arr的最后元素——函数并执行
  • 写一个函数filterNumericInPlace,过滤数组中的数字,删除非数字
arr = ["a", 1,3,4,5, "b", 2];
//对原数组进行操作,不需要返回值
function filterNumericInPlace(array){
  var key;
  for (key in array){
    if (typeof array[key] !== "number"){
      array.splice(key,1)
    }
  }       
}
filterNumericInPlace(arr);
console.log(arr)  // [1,3,4,5,2]
  • 写一个ageSort函数实现如下功能
var john = { name: "John Smith", age: 23 }
var mary = { name: "Mary Key", age: 18 }
var bob = { name: "Bob-small", age: 6 }
var people = [ john, mary, bob ]
ageSort(people) // [ bob, mary, john ]
function ageSort(people){
  function sortNumber(o1,o2){
    return o1.age-o2.age
  }
}
  • 写一个filter(arr, func)函数用于过滤数组,接受两个参数,第一个是要处理的数组,第二个参数是回调函数(回调函数遍历接受每一个数组元素,当函数返回true时保留该元素,否则删除该元素)。实现如下功能:
arr = ["a",3,4,true, -1, 2, "b"]
function isNumeric (el){
  return typeof el === "number";
}
function filter(arr,func){
  var i;
  for (i=0;i<arr.length;i++){
  if (!func(arr[i])){
    arr.splice(i,1)
    i--;
  }  
  }
  return arr
}
arr = filter(arr, isNumeric) ; 
console.log(arr);//  [3,4,-1, 2],  过滤出数字
arr = filter(arr, function(val) { return val > 0 });  
console.log(arr);// [3,4,2] 过滤出大于0的整数

3.字符串

  • 写一个 ucFirst函数,返回第一个字母为大写的字符
ucFirst("hunger");
function ucFirst(str){
   var strArr,upCaseFL
   strArr = str.split("")//strArr=["h","u","n","g","e","r"]
   upCaseFL = strArr[0].toUpperCase();
   strArr.splice(0,1,upCaseFL)
   return strArr.join("");
}
  • 写一个函数truncate(str, maxlength), 如果str的长度大于maxlength,会把str截断到maxlength长,并加上...,如
//思路
//1.1如果字符串长度大于给定的最大长度n
//2.截取从第1个字符至maxlength的字符,并添加"..."
//1.2如果小于或等于n,则输出原来值
function truncate(str,maxlength){
  var newStr
  if (str.length > maxlength){
    newStr = str.substring(0,maxlength)+"..."
    console.log(newStr)
  }else {
    console.log(str)
  }
}
truncate("hello, this is hunger valley,", 10) 
truncate("hello world", 20)

4.数学函数

  • 写一个函数limit2,保留数字小数点后两位,四舍五入, 如:
var num1 = 3.456
function limit2(num){
    return round(num*100)/100
}
limit2( num1);
limit2(2.42)
  • 写一个函数,获取从min到max之间的随机数,包括min不包括max
function getRandomArbitrary(min,max){
  var value;
  value = Math.random()*(max-min)+min
  return value;
}
getRandomArbitrary(1.5,3)
  • 写一个函数,获取从min都max之间的随机整数,包括min包括max
function getRandomInt(min,max){
  var value;
  value = Math.floor(Math.random()*(max-min+1))+min
  return value;
}
getRandomInt(1,7);
  • 写一个函数,获取一个随机数组,数组中元素为长度为len,最小值为min,最大值为max(包括)的随机数
function randomArr(arrLength,min,max){
  var i,value,arr=[];
  for (i=0;i<arrLength;i++){
    value = Math.floor(Math.random()*(max-min+1))+min
    arr.push(value);
  }
  return arr
}
randomArr(10,10,100)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容