這邊文章分兩部分,第一部分是slice()的使用,第二部分是用slice將類陣列轉換成陣列
第一部分:
官方文件說:slice是用來擷取選取陣列的,可傳入乙個或兩個引數,返回值是新陣列,不會影響原陣列。
先new了array乙個陣列 str
var str = new array();
str[0] = 1;
str[1] = 2;
str[2] = 3;
str[3] = 4;
str[4] = 5;
返回值是選取的新陣列,原陣列是不會被修改的。
如果是乙個引數就是從何處開始(下標)選取到陣列的末尾。
var strs = str.slice(2);
console.log(strs); // [3, 4, 5]
console.log(str); // [1, 2, 3, 4, 5]
如果傳入二個引數就是從第乙個引數(下標)開始選取到第二個引數(下標)結束,但是不包括第二個引數
var strs = str.slice(2,4);
console.log(strs); // [3, 4]
如果傳入的是負數,規定從陣列的尾部開始算起,-1指最後乙個元素,-2指倒數第二個元素,以此類推
var strs = str.slice(-2);
console.log(strs); // [4, 5]
如果傳入兩個負數,和上面一樣 不過都是都從陣列的尾部開始。
var strs = str.slice(-4,-1);
console.log(strs); // [2, 3, 4]
如果傳入兩個引數,第二個引數小於第乙個引數,那麼結果為空陣列(負數也同理)。
var strs = str.slice(-1,1);
console.log(strs); // [ ]
不過在實踐中一般是用來將類陣列轉換成陣列
這是我之前寫的一串html**用來獲取類陣列
結果如下:
var nodelist = document.queryselectorall("div");
console.log(nodelist); //nodelist(10) [div, div, div, div, div, div, div, div, div, div]
nodelist = .slice.call(nodelist);
console.log(nodelist) //(10) [div, div, div, div, div, div, div, div, div, div]
第一行是先獲取一串類陣列
第二行是在控制台輸出類陣列
第三行是轉換類陣列(需要用變數來接受)或者array.prototype.slice.call(nodelist)也是可以的,兩個是同理
第四行是在控制台輸出轉換過的陣列。
不知道你學會了沒?我也不知道學會沒,反正敲了好幾遍hhhh
將arguments轉換成陣列的方法
將函式裡的arguments,轉換成乙個真正的陣列的方法,arguments是個類陣列,除了有實參所組成的類似陣列以外,還有自己的屬性,如callee,arguments.callee就是當前正在執行的這個函式的引用,它只在函式執行時才存在。因為在函式開始執行時,才會自動建立第乙個變數argumen...
vector轉換成陣列
std vector,內部儲存的所有元素,都是占用一片連續的記憶體空間。因此,比較好的做法就是直接取第乙個元素的位址,得到了首位址,之後的做法與陣列也是大同小異了。舉例說明。假設函式func需要以陣列的方式傳遞,函式原型如下 void func double pdataaddress,size t ...
obj轉換成陣列
原則上obj是不能轉換成陣列的。首先array也是obj。只是乙個特殊的object。obj乙個很關鍵的點,是擁有成員和方法,撇開方法不說,obj就是乙個key value結構。也就是雜湊陣列,而js的陣列只能是由數字索引組成的。撇開了key,只留下value的話資料丟失太多。如果保留了key,那麼...