task 總結(jié)2— js對(duì)數(shù)組進(jìn)行各種操作的總結(jié)

1. 連接兩個(gè)數(shù)組的方法

  • concat()方法
    js的Array對(duì)象提供了一個(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í)會(huì)返回一個(gè)新的數(shù)組。這樣當(dāng)我們需要進(jìn)行多次的數(shù)組合并時(shí),會(huì)造成很大的內(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è)方法!不管誰(shuí)的東西都能拿來(lái)用!
a.push.apply(a,b); 

直接調(diào)用a.push這個(gè)函數(shù)的apply()方法,同事把b當(dāng)做參數(shù)(數(shù)組)傳入,這樣這個(gè)a.push方法就會(huì)遍歷b數(shù)組中的所有元素,達(dá)到合并的效果了!

tips

  • 以上3種合并方法并沒有考慮過a、b兩個(gè)數(shù)組誰(shuí)的長(zhǎng)度更小。所以好的做法是預(yù)先判斷a、b兩個(gè)數(shù)組哪個(gè)更大,然后使用大數(shù)組合并小數(shù)組,這樣就減少了數(shù)組元素操作的次數(shù)!
  • 有時(shí)候我們不希望原數(shù)組(a、b)改變,這時(shí)就只能使用concat了。

2. 刪除數(shù)組中的重復(fù)元素只保留一個(gè)

  • 第一種思路:遍歷要?jiǎng)h除的數(shù)組arr,把元素放入另一個(gè)數(shù)組tmp中,在判斷該元素在arr中不存時(shí)才允許放入tmp中
    for...of語(yǔ)句
    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)換 自動(dòng)就把重復(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ù)組的方法

image.png

數(shù)組就是那個(gè)任何其他對(duì)象,所以如果用typeof array 的話,返回值會(huì)是"object",typeof比較適合用來(lái)判斷基本類型

object instanceof constructor

object是你要檢測(cè)的對(duì)象, 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 這兩段代碼是一樣的

這種方法看上去很萬(wàn)無(wú)一失并且高大上,除了萬(wàn)惡的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)成字符串

  • 簡(jiǎn)單方法
let num = 19;
console.log(num + '');            //'19'

很巧妙的方法,直接利用字符串拼接

let num = 39;
console.log(String(num));         // '39'
  • toString()方法
    toString() ()中放入的數(shù)字可以順帶轉(zhuǎn)換成別的進(jìn)制形成的字符串,如果沒指定括號(hào)里的基數(shù),默認(rèn)就是10,例如:
console.log((10).toString());          //'10'
console.log((10).toString(2));        //'1010'
  • toFixed()方法
    toFixed() 方法其實(shí)是用來(lái)使用定點(diǎn)表示法來(lái)格式化一個(gè)數(shù)的。不過它的返回值是一個(gè)數(shù)值的字符串表現(xiàn)形式,所以也可以用來(lái)數(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ù)字

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在取整上的作用差不多
最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Javascript有很多數(shù)組的方法,有的人有W3C的API,還可以去MDN上去找,但是我覺得API上說(shuō)的不全,M...
    頑皮的雪狐七七閱讀 4,492評(píng)論 0 6
  • js基礎(chǔ)篇(三)——DOM的各種操作js基礎(chǔ)篇(二)——字符串的各種操作 1. 創(chuàng)建數(shù)組 創(chuàng)建一個(gè)數(shù)組,有三種方法...
    hanyuntao閱讀 1,721評(píng)論 0 14
  • Ruby 數(shù)組(Array) Ruby 數(shù)組是任何對(duì)象的有序整數(shù)索引集合。數(shù)組中的每個(gè)元素都與一個(gè)索引相關(guān),并可通...
    黑夜的眸閱讀 1,180評(píng)論 0 0
  • 凡事成與不成關(guān)鍵在于你是否對(duì)這件事真的用心,如果你真的用心了,那么一定有著“非凡”的結(jié)果,在這個(gè)基礎(chǔ)之上也許你能夠...
    福爾摩星閱讀 486評(píng)論 0 0
  • 《騰訊傳1998-2016:中國(guó)互聯(lián)網(wǎng)公司進(jìn)化論》 吳曉波 一直都想不出要怎樣給一本傳記寫書評(píng),在我看來(lái),...
    南呂依依閱讀 617評(píng)論 0 0

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