ife2018 #day22-24 字符串 對象 數(shù)組 隊(duì)列 棧

字符串

  • string.length 獲取長度
    string[string.length-1] 獲取最后一個(gè)字符

  • stringA.concat(stringB) 將B連接到A后面,數(shù)組適用

  • string.indexOf('childString') 搜索第一次出現(xiàn)子字符串的位置
    返回開始的index,若不存在子字符串,返回-1

  • string.lastIndexOf('childString') 搜索最后一次出現(xiàn)子字符串的位置

  • string.slice(startIndex, endIndex) 提取子字符串
    不包括最后一個(gè)字符
    string.slice(3) 從3開始到最后一個(gè)字符

  • string.substr(startIndex, length) 提取子字符串
    string.substr(3) 從3開始到最后一個(gè)字符

  • 大小寫轉(zhuǎn)換
    radData.toLowerCase();
    radData.toUpperCase();

  • 替換字符
    browserType.replace('moz','van'); 將第一個(gè)參數(shù)內(nèi)容替換為第二個(gè)參數(shù)

  • 大寫修正(首字母大寫)

var list = document.querySelector('.output ul');
list.innerHTML = '';
var cities = ['lonDon', 'ManCHESTer', 'BiRmiNGHAM', 'liVERpoOL'];

for(var i = 0; i < cities.length; i++) {
  var input = cities[i];
  var lower = input.toLowerCase();//轉(zhuǎn)換為小寫
  var firstLetter = lower.slice(0,1);//首字母分離
  var capitalized = lower.replace(firstLetter,firstLetter.toUpperCase());//替換首字母
  var result = capitalized;
  var listItem = document.createElement('li');
  listItem.textContent = result;
  list.appendChild(listItem);
}

對象

  • var person = {}; 創(chuàng)建空對象
  • 創(chuàng)建語法
var objectName = {
  member1Name : member1Value,
  member2Name : member2Value,
  member3Name : member3Value
}
  • 例子:對象的字面量(literal)——手動(dòng)的寫出對象的內(nèi)容來創(chuàng)建一個(gè)對象
var person = {
  //對象的屬性(property)
  name : ['Bob', 'Smith'],   //array
  age : 32,                  //number
  gender : 'male',           //string
  interests : ['music', 'skiing'], //array

  //對象的方法(method)
  bio : function() {
    alert(this.name[0] + ' ' + this.name[1] + ' is ' + this.age + ' years old. He likes ' + this.interests[0] + ' and ' + this.interests[1] + '.');
  },  //function
  greeting: function() {
    alert('Hi! I\'m ' + this.name[0] + '.');
  }   //function,最后一個(gè)成員后不加逗號(hào)
};
  • 訪問
    1. 點(diǎn)表示法(dot notation)
    person.age
    person.interests[1]
    person.bio()
    
    1. 括號(hào)表示法(bracket notation)
    person['age']
    person['name']['first']
    
    括號(hào)表示法一個(gè)有用的地方是它不僅可以動(dòng)態(tài)的去設(shè)置對象成員的值,還可以動(dòng)態(tài)的去設(shè)置成員的名字。
    比如說,我們想讓用戶能夠在他們的數(shù)據(jù)里存儲(chǔ)自己定義的值類型,通過兩個(gè)input框來輸入成員的名字和值,通過以下代碼獲取用戶輸入的值:
    var myDataName = nameInput.value
    var myDataValue = nameValue.value
    
    我們可以這樣把這個(gè)新的成員的名字和值加到person對象里:
    person[myDataName] = myDataValue
    
  • 子命名空間
name : {
  first : 'Bob',
  last : 'Smith'
},

//訪問時(shí)
person.name.first;
person.name.last;
  • 直接創(chuàng)建新成員
person.farewell = function() { alert("Bye everybody!") }
person['eyes'] = 'hazel'
  • 排序
    對象可以按照某個(gè)屬性排序:
    var items = [
      { name: 'Edward', value: 21 },
      { name: 'Sharpe', value: 37 },
      { name: 'And', value: 45 },
      { name: 'The', value: -12 },
      { name: 'Magnetic' },
      { name: 'Zeros', value: 37 }
    ];
    
    // sort by value
    items.sort(function (a, b) {
      return (a.value - b.value)
    });
    
    // sort by name
    items.sort(function(a, b) {
      var nameA = a.name.toUpperCase(); // ignore upper and  lowercase
      var nameB = b.name.toUpperCase(); // ignore upper and lowercase
      if (nameA < nameB) {
        return -1;
      }
      if (nameA > nameB) {
        return 1;
      }
    
      // names must be equal
      return 0;
    });
    

數(shù)組

  • 常用方法

    str.split("-") 將字符串轉(zhuǎn)換為數(shù)組,參數(shù)為分隔符
    arr.join("-") 將數(shù)組用分隔符連接轉(zhuǎn)為字符串
    pop()刪除并返回?cái)?shù)組的最后一個(gè)元素
    push()向數(shù)組的末尾添加一個(gè)或更多元素,并返回新的長度
    reverse()顛倒數(shù)組中元素的順序
    shift()刪除并返回?cái)?shù)組的第一個(gè)元素
    slice()從某個(gè)已有的數(shù)組返回選定的元素
    sort()對數(shù)組的元素進(jìn)行排序
    splice()刪除元素,并向數(shù)組添加新元素
    toSource()返回該對象的源代碼
    toString()把數(shù)組轉(zhuǎn)換為字符串,并返回結(jié)果
    unshift()向數(shù)組的開頭添加一個(gè)或更多元素,并返回新的長度

  • 數(shù)組的深拷貝
    1. for 循環(huán)
    2. slice 方法
    3. concat 方法
    4. ES6擴(kuò)展運(yùn)算符
        var arr = [1,2,3,4,5]
        var [ ...arr2 ] = arr
        arr[2] = 5
        console.log(arr)
        console.log(arr2)
    
  • 排序

    arr.sort([compareFunction])

    • 如果沒有指明 compareFunction ,那么元素會(huì)按照轉(zhuǎn)換為的字符串的諸個(gè)字符的Unicode位點(diǎn)進(jìn)行排序。
    • 如果指明了 compareFunction ,那么數(shù)組會(huì)按照調(diào)用該函數(shù)的返回值排序。即 a 和 b 是兩個(gè)將要被比較的元素:
      1.如果 compareFunction(a, b) 小于 0 ,那么 a 會(huì)被排列到 b 之前;
      2.如果 compareFunction(a, b) 等于 0 , a 和 b 的相對位置不變。備注: ECMAScript 標(biāo)準(zhǔn)并不保證這一行為,而且也不是所有瀏覽器都會(huì)遵守(例如 Mozilla 在 2003 年之前的版本);
      3.如果 compareFunction(a, b) 大于 0 , b 會(huì)被排列到 a 之前。
      compareFunction(a, b) 必須總是對相同的輸入返回相同的比較結(jié)果,否則排序的結(jié)果將是不確定的。
      例子
    function compare(a, b) {
      if (a < b ) {           // 按某種排序標(biāo)準(zhǔn)進(jìn)行比較, a 小于 b
        return -1;
      }
      if (a > b ) {
        return 1;
      }
      // a must be equal to b
      return 0;
    }
    

    sort 方法可以使用 函數(shù)表達(dá)式 方便地書寫

    var numbers = [4, 2, 5, 1, 3];
    numbers.sort(function(a, b) {
      return a - b;
    });
    console.log(numbers);
    
    也可以寫成:
    var numbers = [4, 2, 5, 1, 3]; 
    numbers.sort((a, b) => a - b); 
    console.log(numbers);
    
    // [1, 2, 3, 4, 5]
    
  • 對非 ASCII 字符排序

  • 使用映射改善排序

隊(duì)列

隊(duì)列-百度百科

  • 隊(duì)列是一種特殊的線性表,特殊之處在于它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作。
    又稱為先進(jìn)先出(FIFO—first in first out)線性表

  • 順序隊(duì)列

    建立順序隊(duì)列結(jié)構(gòu)必須為其靜態(tài)分配或動(dòng)態(tài)申請一片連續(xù)的存儲(chǔ)空間,并設(shè)置兩個(gè)指針進(jìn)行管理。一個(gè)是隊(duì)頭指針front,它指向隊(duì)頭元素;另一個(gè)是隊(duì)尾指針rear,它指向下一個(gè)入隊(duì)元素的存儲(chǔ)位置,如下圖:


    當(dāng)front=rear時(shí),隊(duì)列中沒有任何元素,稱為空隊(duì)列。
  • 循環(huán)隊(duì)列

    在實(shí)際使用隊(duì)列時(shí),為了使隊(duì)列空間能重復(fù)使用,往往對隊(duì)列的使用方法稍加改進(jìn):無論插入或刪除,一旦rear指針增1或front指針增1 時(shí)超出了所分配的隊(duì)列空間,就讓它指向這片連續(xù)空間的起始位置。自己真從MaxSize-1增1變到0,可用取余運(yùn)算rear%MaxSize和front%MaxSize來實(shí)現(xiàn)。這實(shí)際上是把隊(duì)列空間想象成一個(gè)環(huán)形空間,環(huán)形空間中的存儲(chǔ)單元循環(huán)使用,用這種方法管理的隊(duì)列也就稱為循環(huán)隊(duì)列。除了一些簡單應(yīng)用之外,真正實(shí)用的隊(duì)列是循環(huán)隊(duì)列。

    在循環(huán)隊(duì)列中,當(dāng)隊(duì)列為空時(shí),有front=rear,而當(dāng)所有隊(duì)列空間全占滿時(shí),也有front=rear。為了區(qū)別這兩種情況,規(guī)定循環(huán)隊(duì)列最多只能有MaxSize-1個(gè)隊(duì)列元素,當(dāng)循環(huán)隊(duì)列中只剩下一個(gè)空存儲(chǔ)單元時(shí),隊(duì)列就已經(jīng)滿了。因此,隊(duì)列判空的條件時(shí)front=rear,而隊(duì)列判滿的條件時(shí)front=(rear+1)%MaxSize。隊(duì)空和隊(duì)滿的情況如圖:


棧-百度百科
棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱為棧頂,相對地,把另一端稱為棧底。
允許進(jìn)行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動(dòng);棧中元素個(gè)數(shù)為零時(shí)稱為空棧。插入一般稱為進(jìn)棧(PUSH),刪除則稱為退棧(POP)。棧也稱為后進(jìn)先出表。

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

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