数组、字符串&函数-Assignment
2016-06-20 本文已影响61人
犯迷糊的小羊
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)