js中的slice和splice

  1. slice(startIndex[, endIndex])
    功能:字符串和數組原型上都有slice方法,字符串調用slice方法可以返回子串,數組調用slice方法可以返回子數組。
    參數:
    startIndex: 可選,表示子串截取自原字符串的開始位置,不填默認爲字符串開始位置;
    endIndex: 可選,表示子串截取自原字符串的結束位置(不包含該位置),不填默認至字符串結尾。
  • 針對string數據類型

情況1: 調用時不填寫參數

var str = 'hello world'
var substr = str.slice()
console.log(substr)  //'hello world'

由上例可知,如果沒填startIndex,則默認從位置0開始截取。
情況2:調用時只有startIndex, 沒有endIndex

var str = 'hello world'
var substr = str.slice(1)
console.log(substr)  //'ello world'
console.log(str) //'hello world', 因此字符串調用slice方法不會對原字符串造成影響

由上例可知,如果沒填endIndex,則默認截取到原字符串的末尾。
情況3:startIndex或endIndex爲負數

var str = 'hello world'
var substr1 = str.slice(-3)
console.log(substr1)  //'rld'
var substr2 = str.slice(3, -3)
console.log(substr2)  //"lo wo"
var substr3 = str.slice(-3, 3)
console.log(substr3)  //""
var substr4 = str.slice(-4, -3)
console.log(substr4)  //"o"

由上例可知,slice的參數中如果出現負數(負數的絕對值要小於數組的長度),那麼就按照的概念進行理解,負數 === str.length + 負數。另外要注意兩點:(1)startIndex的模要小於endIndex的模,不然返回的結果爲空字符串,如substr3。(2)startIndex和endIndex的絕對值要小於字符串長度,否則就默認爲0。
情況4:endIndex大於str.length

var str = 'hello world'
var substr1 = str.slice(0,15)
console.log(substr1)  //'hello world'

由上例可知,如果endIndex的值大於字符串長度,則截取到字符串結尾。

  • 針對array數據類型
    array數據類型調用slice方法完全可以參考string數據類型。這裏唯一要注意的是,對類數組對象調用slice方法可以轉換成數組。
function list() {
   return Array.prototype.slice.call(arguments)
}
var argumentsArr = list(1,2,3) //[1, 2, 3]
  1. array.splice(start[, deleteCount[, item1[, item2[, …]]]])
    功能:splice方法只有數組類型支持,直接在原數組上添加或刪除元素,返回被刪除的元素組成的數組,如果沒有刪除元素,則返回空數組。
    參數:
    start: 可選,指定修改的開始位置(從0計數)。如果超出了數組的長度,則從數組末尾開始添加內容;如果是負值,則表示從數組末位開始的第幾位(從-1計數);如果負數的絕對值大於數組的長度,則表示開始位置爲第0位;
    deleteCount: 一般情況下必須填寫,表示刪除元素的個數,如果deleteCount的值大於start及之後元素的總個數,則將start及其之後的元素全部刪除,如果deleteCount的值省略(splice方法只傳入一個start參數),則同樣將start及其之後的元素全部刪除;
    item1, item2, …: 可選,要添加進數組的元素。
var arr = ['a', 'b', 'c', 'd'];
//一個參數都不傳,相當於不做任何操作
var arr1 = arr.splice() //[]
//只有start一個參數,相當於刪除start及其之後的所有元素
var arr2 = arr.splice(3) //['d']
//僅添加不刪除元素
var arr3 = arr.splice(1, 0, 'd', 'e', 'f') //arr3的值爲[], arr值爲 ["a", "d", "e", "f", "b", "c"]
//刪除一部分元素,同時添加一部分元素
var arr4 = arr.splice(1, 2, 'g') //arr4的值爲["d", "e"], arr值爲 ["a", "g", "f", "b", "c"]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章