JS數(shù)組、字符串、數(shù)學(xué)函數(shù)

  • 數(shù)組方法里push、pop、shift、unshift、join、split分別是什么作用。(*)
  • (push、pop)堆棧方法:
    push、pop方法可以使數(shù)組類(lèi)似于棧,在棧的頂部(數(shù)組末尾)進(jìn)行插入和移除。棧是一種限制插入和刪除項(xiàng)的數(shù)據(jù)結(jié)構(gòu)(最新添加的項(xiàng)最早被移除--后進(jìn)先出)
var arr = [1,2,3];
arr.push(4);//返回4并添加到數(shù)組末尾
console.log(arr);//[1, 2, 3, 4]
arr.pop();//取得數(shù)組末尾4并移除
console.log(arr);//[1,2,3]
  • (shift、unshift)隊(duì)列方法:
    shift、unshift方法使數(shù)組以隊(duì)列數(shù)據(jù)結(jié)構(gòu)的方式對(duì)數(shù)組首位進(jìn)行添加(推入)刪除(先進(jìn)先出)
var arr = [1,2,3];
arr.shift();//取得數(shù)組首位1并移除
console.log(arr);//[2, 3]
arr.unshift(0,1);//返回?cái)?shù)組當(dāng)前長(zhǎng)度4,并在數(shù)組首位推入0,1
console.log(arr);//[0, 1, 2, 3]
  • join操作方法:
    數(shù)組對(duì)象的方法都是默認(rèn)用逗號(hào)分隔字符串的形式返回?cái)?shù)組的每一項(xiàng)。如果使用join()方法,則可以使用不同的分隔符來(lái)構(gòu)建這個(gè)字符串。join()方法是把數(shù)組分隔并返回字符串
var arr = [1,2,3,4,5,6,7];
arr.join("||");
console.log(arr);//"1||2||3||4||5||6||7"
arr.join("--");
console.log(arr);//"1--2--3--4--5--6--7"
  • 利用轉(zhuǎn)義字符對(duì)數(shù)組進(jìn)行轉(zhuǎn)化:
    /r(橫向跳到下一制表符位置)
    /t(回車(chē)這里不換行)
    /n(回車(chē)并換行)


    利用轉(zhuǎn)義字符分隔數(shù)組
  • split操作方法:
    split()是把一段字符串以設(shè)定的分隔符來(lái)分隔并返回為數(shù)組的方法,split(separator, limit), separator指定用來(lái)分割字符串的字符,limit為返回的數(shù)組長(zhǎng)度是個(gè)可選值

var str = "Hello,world";
str.split("");//按""進(jìn)行分隔["H", "e", "l", "l", "o", ",", "w", "o", "r", "l", "d"]
var str1 = "a b c d e";
str1.split(" ", 3);//按" "空格進(jìn)行分隔并返回的數(shù)組長(zhǎng)度為3["a", "b", "c"]
  • 數(shù)組
    • 用 splice 實(shí)現(xiàn) push、pop、shift、unshift方法 (3*)
        var arr = [1,2,3,4,5];
        function push(arr, val) {
            arr.splice(arr.length, 0, val);
            return arr.length;
        }
        function pop(arr) {
            return arr.splice(arr.length - 1, 1)[0];
        }
        function unshift(arr, val) {
            arr.splice(0, 0, val);
            return arr.length;
        }
        function shift(arr) {
            return arr.splice(0, 1)[0];
        }
  • 使用數(shù)組拼接出如下字符串 (3*)
var prod = {
    name: '女裝',
    styles: ['短款', '冬季', '春裝']
};
function getTpl(data){
          var dom = [];
          dom.push('<dl class="product">');
        dom.push('<dt>' + data.name + '</dt>');
        for (var i = 0; i < data.styles.length; i++) {
          dom.push('<dd>' + data.styles[i] + '<dd>');
          }
          dom.push('</dl>');
          return dom.join("\n");;
};
var result = getTplStr(prod);  //result為下面的字符串
<dl class="product">
    <dt>女裝</dt>
    <dd>短款</dd>
    <dd>冬季</dd>
    <dd>春裝</dd>
</dl>
  • 寫(xiě)一個(gè)find函數(shù),實(shí)現(xiàn)下面的功能 (3*)
var arr = [ "test", 2, 1.5, false ]
find(arr, "test") // 0
find(arr, 2) // 1
find(arr, 0) // -1
            function find(arr, val){
                // return arr.indexOf(val);
                for(var i = 0; i < arr.length; i++){
                    if (arr[i] === val) {
                        return i;
                    }
                }
                return -1;
            }
function find(arr, val) {
      return arr.indexOf(val); 
}//ES5方法
  • 寫(xiě)一個(gè)函數(shù)filterNumeric,實(shí)現(xiàn)如下功能 (****)
arr = ["a", "b", 1, 3, 5, "b", 2];
newarr = filterNumeric(arr); // [1,3,5,2]
            var arr1 = ["a", "b", 1, 3, 5, "b", 2];
            function filterNumeric(arr) {
                var arr2= [];
                for (var i = 0; i < arr.length; i++) {
                    if (typeof arr[i] == "number") {
                        arr2.push(arr[i]);
                    }
                }
                return arr2;
            }
            var newarr = filterNumeric(arr1); //[1,3,5,2]
  • 對(duì)象obj有個(gè)className屬性,里面的值為的是空格分割的字符串(和html元素的class特性類(lèi)似),寫(xiě)addClass、removeClass函數(shù),有如下功能:(****)
var obj = {
  className: 'open menu'
}
addClass(obj, 'new') // obj.className='open menu new'
addClass(obj, 'open')  // 因?yàn)閛pen已經(jīng)存在,此操作無(wú)任何辦法
addClass(obj, 'me') // obj.className='open menu new me'
console.log(obj.className)  // "open menu new me"
removeClass(obj, 'open') // obj.className='menu new me'
removeClass(obj, 'blabla')  // 不變
           var obj = {
                className: 'open menu'
            };
            function addClass(obj, value) {
                var arr = obj.className.split(" ");
                if (arr.indexOf(value) == -1) {
                    arr.push(value);
                    obj.className = arr.join(" ");
                    return obj.className;
                }
                else {
                    console.log("因?yàn)? + value + "已經(jīng)存在,此操作無(wú)任何辦法");
                }
            }
            function removeClass(obj, value) {
                var arr = obj.className.split(" ");
                if (arr.indexOf(value) != -1) {
                    arr.splice(arr.indexOf(value), 1);
                    obj.className = arr.join(" ");
                    return obj.className;
                }
                else {
                    console.log(value + "不存在");
                }
            }
  • 寫(xiě)一個(gè)camelize函數(shù),把my-short-string形式的字符串轉(zhuǎn)化成myShortString形式的字符串,如 (3*)
camelize("background-color") == 'backgroundColor'
camelize("list-style-image") == 'listStyleImage'

slice(start,end)數(shù)組方法可以直接用于數(shù)組,當(dāng)對(duì)象是string和number時(shí)slice會(huì)把string和number拷貝到一個(gè)新數(shù)組里(轉(zhuǎn)化成一個(gè)新數(shù)組進(jìn)行操作)

          function camelize(str) {
                var arr = str.split("-");
                for (var i = 1; i < arr.length; i++) {
                    arr[i] = arr[i].slice(0, 1).toUpperCase() + arr[i].slice(1);
                }
                str = arr.join("");
                return str;     
            }
            camelize('background-color');
            camelize('list-style-image');
  • 如下代碼輸出什么?為什么? (***)
arr = ["a", "b"];
arr.push( function() { alert(console.log('hello hunger valley')) } );
arr[arr.length-1]()  // 控制臺(tái)輸出'hello hunger valley',彈窗顯示undefined
//arr.push()方法把函數(shù)添加到了數(shù)組arr的最尾端
//arr[arr.length-1]() 直接執(zhí)行了數(shù)組中的函數(shù)
//函數(shù)執(zhí)行console.log('hello hunger valley')輸出字符串,但返回的是undefined
//彈窗變?yōu)閍lert(undefined)彈出undefined結(jié)果
  • 寫(xiě)一個(gè)函數(shù)filterNumericInPlace,過(guò)濾數(shù)組中的數(shù)字,刪除非數(shù)字 (4*)
arr = ["a", "b", 1, 3, 4, 5, "b", 2];
//對(duì)原數(shù)組進(jìn)行操作,不需要返回值
filterNumericInPlace(arr);
console.log(arr)  // [1,3,4,5,2]
           arr = ["a", "b", 1, 3, 4, 5, "b", 2];
            //對(duì)原數(shù)組進(jìn)行操作,不需要返回值
            function filterNumericInPlace(arr) {
                for (var i = arr.length-1; i >= 0; i--) {
                    if(typeof arr[i] != "number") {
                        arr.splice(i, 1);//會(huì)改變數(shù)組的長(zhǎng)度
                    }
                }
            }//使用i++會(huì)因?yàn)閿?shù)組長(zhǎng)度改變,每進(jìn)行刪除時(shí)數(shù)組頭部開(kāi)始后面的每一項(xiàng)的位置都在前移。
//而使用i--,數(shù)組長(zhǎng)度改變但數(shù)組前部的其他項(xiàng)的位置沒(méi)有變只是尾部各項(xiàng)的位置前移,但尾部各項(xiàng)因?yàn)楸闅v過(guò)了的位置前移并不影響。
//就好像一個(gè)隊(duì)列移走哪個(gè)位置的人后排的所有人就會(huì)向前走一步占據(jù)被移走的那個(gè)位置,但前排的人位置始終是不變的。
            filterNumericInPlace(arr);
            console.log(arr);  // [1,3,4,5,2]
  • 寫(xiě)一個(gè)ageSort函數(shù)實(shí)現(xiàn)如下功能 (3*)
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 ]
            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 ]
            function ageSort(people) {
                var arr = [];
                people.sort(function(a, b){ return a.age - b.age;});
                for (var i = 0; i < people.length; i++) {
                    arr.push(people[i].name);
                }
                return arr;
            }
            ageSort(people) // [ bob, mary, john]
//sort()數(shù)組方法可以隨機(jī)抽取數(shù)組內(nèi)的兩個(gè)項(xiàng)進(jìn)行比較,并進(jìn)行排序。
  • 寫(xiě)一個(gè)filter(arr, func) 函數(shù)用于過(guò)濾數(shù)組,接受兩個(gè)參數(shù),第一個(gè)是要處理的數(shù)組,第二個(gè)參數(shù)是回調(diào)函數(shù)(回調(diào)函數(shù)遍歷接受每一個(gè)數(shù)組元素,當(dāng)函數(shù)返回true時(shí)保留該元素,否則刪除該元素)。實(shí)現(xiàn)如下功能: (****)
            function isNumeric (el){
                return typeof el === 'number'; 
            }
            arr = ["a",3,4,true, -1, 2, "b"]
            function filter(arr, func) {
                for (var i = 0; i < arr.length; i++) {
                    if (!func(arr[i]) || typeof arr[i] == "boolean") {
                        arr.splice(i, 1);
                    }
                }
                return arr;
            }
            arr = filter(arr, isNumeric) ; // arr = [3,4,-1, 2],  過(guò)濾出數(shù)字
            arr = filter(arr, function(val) { return val > 0 });  // arr = [3, 4, 2] 過(guò)濾出大于0的整數(shù)
  • 字符串
  • 寫(xiě)一個(gè) ucFirst函數(shù),返回第一個(gè)字母為大寫(xiě)的字符 (***)
            function ucFirst(str) {
                str = str.slice(0, 1).toUpperCase() + str.slice(1);
                return str;
            }
ucFirst("hunger") == "Hunger"
  • 寫(xiě)一個(gè)函數(shù)truncate(str, maxlength), 如果str的長(zhǎng)度大于maxlength,會(huì)把str截?cái)嗟絤axlength長(zhǎng),并加上...,如 (4*)
truncate("hello, this is hunger valley,", 10)) == "hello, thi...";
truncate("hello world", 20)) == "hello world"
              function truncate(str, maxlength) {
                if (str.length >= maxlength) {
                        str = str.slice(0, maxlength+1) + "...";
                    }
                return str;
            }
  • 數(shù)學(xué)函數(shù)
  • 寫(xiě)一個(gè)函數(shù)limit2,保留數(shù)字小數(shù)點(diǎn)后兩位,四舍五入, 如: (**)
var num1 = 3.456;
limit2( num1 ); //3.46
limit2( 2.42 ); //2.42
            function limit2(num) {
                num = Math.round(num * 100);
                return num/100;
            }
            var num1 = 3.456;
            limit2( num1 ); //3.46
            limit2( 2.42 ); //2.42
  • 寫(xiě)一個(gè)函數(shù),獲取從min到max之間的隨機(jī)數(shù),包括min不包括max (***)
            function ran(min, max) {
                return Math.random() * (max - min) + min;
            }
  • 寫(xiě)一個(gè)函數(shù),獲取從min都max之間的隨機(jī)整數(shù),包括min包括max (***)
            function ran1(min, max) {
                return Math.floor(Math.random() * (max - min + 1) + min);
            }//floor是向下舍入。  
  • 寫(xiě)一個(gè)函數(shù),獲取一個(gè)隨機(jī)數(shù)組,數(shù)組中元素為長(zhǎng)度為len,最小值為min,最大值為max(包括)的隨機(jī)數(shù) (3*)
               function ran2(min, max, len) {
                var arr = [];
                for (var i = 0; i < len; i++) {
                    arr.push(Math.floor(Math.random() * (max - min + 1) + min));
                }
                return arr;
            }   

本博客版權(quán)歸 本人和饑人谷所有,轉(zhuǎn)載需說(shuō)明來(lái)源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容