1. 連接兩個(gè)數(shù)組的方法
-
concat()方法
js的Array對象提供了一個(gè)叫concat()方法逗旁,連接兩個(gè)或更多的數(shù)組,并返回結(jié)果舆瘪。
let c = a.concat(b); //c=[1,2,3,4,5,6]
concat()方法不改變現(xiàn)有數(shù)組片效,而是返回一個(gè)新數(shù)組。所以這里有一個(gè)問題英古,concat()方法連接a淀衣、b兩個(gè)數(shù)組后,a召调、b兩個(gè)數(shù)組的數(shù)據(jù)不變膨桥,同時(shí)會返回一個(gè)新的數(shù)組。這樣當(dāng)我們需要進(jìn)行多次的數(shù)組合并時(shí)唠叛,會造成很大的內(nèi)存浪費(fèi)只嚣,所以這個(gè)方法肯定不是最好的。
-
for循環(huán)
大概的思路是:遍歷其中一個(gè)數(shù)組艺沼,把該數(shù)組中的所有元素依次添加到另外一個(gè)數(shù)組中册舞。
for(let item of b) {
a.push(item);
}
代碼行數(shù)多了點(diǎn),一丟丟麻煩障般。
-
apply()方法
感覺apply和call是javascript里面最牛的兩個(gè)方法调鲸!不管誰的東西都能拿來用!
a.push.apply(a,b);
直接調(diào)用a.push這個(gè)函數(shù)的apply()方法挽荡,同事把b當(dāng)做參數(shù)(數(shù)組)傳入藐石,這樣這個(gè)a.push方法就會遍歷b數(shù)組中的所有元素,達(dá)到合并的效果了徐伐!
tips
- 以上3種合并方法并沒有考慮過a贯钩、b兩個(gè)數(shù)組誰的長度更小。所以好的做法是預(yù)先判斷a办素、b兩個(gè)數(shù)組哪個(gè)更大,然后使用大數(shù)組合并小數(shù)組祸穷,這樣就減少了數(shù)組元素操作的次數(shù)性穿!
- 有時(shí)候我們不希望原數(shù)組(a、b)改變雷滚,這時(shí)就只能使用concat了需曾。
2. 刪除數(shù)組中的重復(fù)元素只保留一個(gè)
- 第一種思路:遍歷要刪除的數(shù)組arr,把元素放入另一個(gè)數(shù)組tmp中,在判斷該元素在arr中不存時(shí)才允許放入tmp中
for...of語句
indexOf()方法
let arr = [1, 2, 2, 3, 1, 2, 4];
function noRepeat(arr) {
let tmp = [];
for(let item of arr) {
if(tmp.indexOf(item) === -1) {
tmp.push(item);
}
}
return tmp;
}
- 第二種思路: 把目標(biāo)數(shù)組arr的元素值和鍵的位置調(diào)換 自動就把重復(fù)的元素給刪除掉了呆万,感覺這種方法有點(diǎn)繞商源,還是上面那種好理解一點(diǎn)
let student = ['qiang','ming','tao','li','liang','you','qiang','tao'];
function unique(arr){
let tmp = [];
for(let item of arr){
tmp[item] = 1;
}
//再把鍵和值的位置再次調(diào)換
let tmparr = [];
for(let n in tmp){
tmparr.push(n);
}
return tmparr;
}
3. 判斷變量是否為數(shù)組的方法
數(shù)組就是那個(gè)任何其他對象,所以如果用typeof array 的話谋减,返回值會是"object"牡彻,typeof比較適合用來判斷基本類型
object instanceof constructor
object是你要檢測的對象, constructor是某個(gè)構(gòu)造函數(shù)(比如Array)出爹,返回值是true or false庄吼,例子:
let arr = [1,23,4];
console.log(arr instanceof Array); //true
- 原型鏈方法
let arr = [1,23,4];
console.log(arr.__proto__.constructor == Array); //true
console.log(arr.constructor == Array); //true 這兩段代碼是一樣的
這種方法看上去很萬無一失并且高大上,除了萬惡的IE早期的兼容性問題
-
isArray()方法
這個(gè)方法是Array的內(nèi)置函數(shù)严就,用于判斷傳遞的值是不是一個(gè)Array总寻。如果是返回true,否則false。
Array.isArray([1,2,3]); //true
假如不存在 Array.isArray(),則在其他代碼之前運(yùn)行下面的代碼將創(chuàng)建該方法最欠。
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
4. 數(shù)字和字符串之間的相互轉(zhuǎn)換
1) 數(shù)字轉(zhuǎn)成字符串
- 簡單方法
let num = 19;
console.log(num + ''); //'19'
很巧妙的方法只磷,直接利用字符串拼接
- 強(qiáng)制轉(zhuǎn)換 String()
let num = 39;
console.log(String(num)); // '39'
-
toString()方法
toString() ()中放入的數(shù)字可以順帶轉(zhuǎn)換成別的進(jìn)制形成的字符串,如果沒指定括號里的基數(shù)叽躯,默認(rèn)就是10,例如:
console.log((10).toString()); //'10'
console.log((10).toString(2)); //'1010'
-
toFixed()方法
toFixed() 方法其實(shí)是用來使用定點(diǎn)表示法來格式化一個(gè)數(shù)的。不過它的返回值是一個(gè)數(shù)值的字符串表現(xiàn)形式旁理,所以也可以用來數(shù)字轉(zhuǎn)換字符串了,()內(nèi)表示你要截取的小數(shù)后的位數(shù)我磁,例如:
let num = 12345.6789;
num.toFixed(); //"12346",四舍五入孽文,不包括小數(shù)位
num.toFixed(1); //"12345.7" 四舍五入
num.toFixed(6); //"12345.678900" 用0填充
2) 字符串轉(zhuǎn)成數(shù)字
- 強(qiáng)制轉(zhuǎn)換 Number()
let str = '15';
console.log(Number(str)); //15
-
parseFloat() & parseInt()
parseInt() 函數(shù)解析一個(gè)字符串參數(shù),并返回一個(gè)指定基數(shù)的整數(shù)
*parseFloat()函數(shù)返回一個(gè)浮點(diǎn)數(shù)夺艰,它只有一個(gè)參數(shù)
let str = '1010';
console(parseInt(str, 10)); //10
let strr = '9.678';
console(parseFloat(strr)); //9.678
5. 數(shù)字取整
-
parseInt()
丟棄小數(shù)部分芋哭,保留整數(shù)位 -
Math.ceil()
向上取整,只要有小數(shù)位郁副,就給整數(shù)位加1 -
Math.floor()
向下取整减牺,和parseInt在取整上的作用差不多