溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

javascript數(shù)組中常用的操作有哪些

發(fā)布時(shí)間:2020-12-02 14:00:03 來(lái)源:億速云 閱讀:149 作者:小新 欄目:web開(kāi)發(fā)

這篇文章主要介紹javascript數(shù)組中常用的操作有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

一、不改變?cè)瓟?shù)組,返回新數(shù)組(字符串)

1、concat()   連接兩個(gè)或者多個(gè)數(shù)組,兩邊的原始數(shù)組都不會(huì)變化,返回的是被連接數(shù)組的一個(gè)副本。

2、join()  把數(shù)組中所有的元素放入到一個(gè)字符串中,返回字符串

var a = [1,2,3];
a.join([4,5,6]);    //  "14,5,624,5,63"
a.join('sau');      //  "1sau2sau3"

3、slice()    從開(kāi)始到結(jié)束(不包括結(jié)束)選擇數(shù)組的一部分淺拷貝到一個(gè)新數(shù)組

var a  = [1,2,3,4,5];
a.slice(0,0);     //[]
a.slice(0,1);     //[1]
a.slice(2,4);    //[3,4]
a.slice(0,5);    //[1,2,3,4,5]
a.slice(10,1);   //[]
a.slice(4);   //[5]

4、map()   創(chuàng)建一個(gè)新的數(shù)組并返回,其中新數(shù)組的每一個(gè)元素由調(diào)用原始數(shù)組中的每一個(gè)元素執(zhí)行提供的函數(shù)得來(lái),原數(shù)組不變

5、every()  對(duì)數(shù)組中的每一個(gè)元素都執(zhí)行一次指定的回調(diào)函數(shù),直到回調(diào)函數(shù)返回false,此時(shí)every()返回false并不再繼續(xù)執(zhí)行,如果回調(diào)函數(shù)都對(duì)每一個(gè)元素都返回true,那么every()返回true。

6、some()  對(duì)數(shù)組中的每一個(gè)元素都執(zhí)行一次指定的回調(diào)函數(shù),直到回調(diào)函數(shù)返回true,此時(shí)some()返回true并不再執(zhí)行。如果回調(diào)函數(shù)對(duì)每一個(gè)元素都返回false,那么some()將返回false。

7、filter()   創(chuàng)建一個(gè)新數(shù)組,其中包含通過(guò)所提供函數(shù)實(shí)現(xiàn)的測(cè)試的所有元素。

二、改變?cè)瓟?shù)組

1、forEach()   針對(duì)每一個(gè)元素執(zhí)行提供的函數(shù)。會(huì)修改原來(lái)的數(shù)組,不會(huì)返回執(zhí)行結(jié)果,返回undefined。

2、pop()   刪除數(shù)組最后一個(gè)元素,返回被刪除的元素的值,如果數(shù)組為空,則不改變數(shù)組,返回undefined。

3、push()   向數(shù)組末尾添加一個(gè)或多個(gè)元素,返回改變后數(shù)組的長(zhǎng)度。

4、reverse()   顛倒數(shù)組中元素的位置,返回該數(shù)組的引用。

5、shift()   從數(shù)組中刪除第一個(gè)元素,改變?cè)瓟?shù)組,并返回該元素的值。

6、unshift()   將一個(gè)或者多個(gè)元素添加到數(shù)組的開(kāi)頭,并返回新數(shù)組的長(zhǎng)度。

7、sort()   對(duì)數(shù)組的元素進(jìn)行排序,返回?cái)?shù)組。排序不一定是穩(wěn)定的。默認(rèn)排序順序是根據(jù)字符串unicode碼點(diǎn)。

8、splice()   向數(shù)組中添加/刪除元素,然后返回被刪除的新數(shù)組()。

var a  = [1,2,3,4,5];
a.splice(0,1);     //刪除從0位置開(kāi)始的1個(gè)   返回[1]   a為[2,3,4,5] 
a.splice(1,0,99)   //在1的位置插入99   [2,99,3,4,5]
a.splice(1,1,88)   //99替換為88  [2,88,3,4,5]

三、遍歷方法

1、獲取屬性名:for...in  和object.key()的區(qū)別

答:1、for in 遍歷對(duì)象可以枚舉的屬性名列表,包括[[prototype]]原型鏈;

2、Object.keys() 只查找屬性名是否在對(duì)象中,返回一個(gè)數(shù)組,包含所有可以枚舉的屬性名;

3、Object.getOwnPropertyNames()只查找屬性名是否在對(duì)象中,返回一個(gè)數(shù)組,包含所有的屬性名,不論是否可枚舉。

2、獲取屬性值: for... of 和object.values()

for of 語(yǔ)句:遍歷可迭代對(duì)象的可枚舉屬性值列表,包括[[propertype]]原型鏈;

object.values() :返回一個(gè)給定對(duì)象自身的所有可枚舉屬性的值,不包括原型鏈。

四、ES6語(yǔ)法Map鍵值對(duì)轉(zhuǎn)化為數(shù)組

new Map創(chuàng)建一個(gè)map

// new Map創(chuàng)建一個(gè)map
let map = new Map([[1,"one"], [2,"two"], [3,"three"]]);
map.set(4, "four");
// 獲取所有鍵值對(duì)
console.log("獲取key")
console.log([...map.keys()]) // 輸出[1, 2, 3, 4]

console.log("獲取value")
console.log([...map.values()]) // 輸出[one, two, three, four]

console.log("獲取map數(shù)組")
console.log([...map]) // 輸出[[1, "one"], [2, "two"], [3, "three"], [4, "four"]]

五、兩個(gè)升序的數(shù)組合并成一個(gè)升序數(shù)組

1、時(shí)間復(fù)雜度O(M+N),空間復(fù)雜度O(M+N)

function merge(left, right){
    let result  = [],
        il      = 0,
        ir      = 0;

    while (il < left.length && ir < right.length) {
        result.push(left[il] < right[ir] ? left[il++] : right[ir++]);
console.log(result);
    }

    return result.concat(left.slice(il)).concat(right.slice(ir));
}

2、時(shí)間復(fù)雜度O(M+N),空間復(fù)雜度O(1)

   // m, n 是數(shù)組長(zhǎng)度
function merge(left, m, right,  n) {
    var i = m - 1, j = n - 1, writeIdx = m + n - 1;
    while (i >= 0 && j >= 0)
    left[writeIdx--] = left[i] > right[j]? left[i--] : right[j--];
    while (j >= 0)
    left[writeIdx--] = right[j--];
    return left;
}

六、數(shù)組重復(fù)問(wèn)題

(一)數(shù)組去重

1、reduce方法

const distinct = arr => arr.sort().reduce( (init, current) => {
    
    if (init.length === 0 || init[init.length - 1] !== current) {
        init.push( current );
    }
    return init;
}, []);

let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4];
distinct(arr); // [1, 2, 3, 4, 5]

2、filter方法

const distinct = arr => arr.filter( (element, index, self) => {

return self.indexOf( element ) === index;
});
let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4];
distinct(arr); // [1, 2, 3, 5, 4]

(二)排序數(shù)組去重

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
    
    if(!nums || nums.length == 0) return 0;
    
    let len = 0;
    for(let i = 1; i < nums.length; i++) {
        if (nums[len] != nums[i]) {
            nums[++ len] = nums[i];
        }
    }
    return len + 1;
};

(三)判斷數(shù)組是否存在重復(fù)

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    
    let hashMap = new Map();
    for(let i = 0; i < nums.length; i++) {
        
        if( hashMap.has(nums[i]) ) {
           return true;
        }
        
        hashMap.set(nums[i], 1);
    }
    
    return false;
};

七、兩個(gè)數(shù)組的交集

給定兩個(gè)數(shù)組,寫(xiě)一個(gè)方法來(lái)計(jì)算它們的交集。

例如:

給定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].

注意:1、出結(jié)果中每個(gè)元素出現(xiàn)的次數(shù),應(yīng)與元素在兩個(gè)數(shù)組中出現(xiàn)的次數(shù)一致。2、

我們可以不考慮輸出結(jié)果的順序。
跟進(jìn):1、如果給定的數(shù)組已經(jīng)排好序呢?你將如何優(yōu)化你的算法?2、如果 nums1 的大小比 nums2 小很多,哪種方法更優(yōu)?3、如果nums2的元素存儲(chǔ)在磁盤(pán)上,內(nèi)存是有限的,你不能一次加載所有的元素到內(nèi)存中,你該怎么辦?

解法:

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersect = function(nums1, nums2) {
    
    var map1 = new Map();
    var number = [];
    
    for(var i = 0; i < nums1.length; i++) {
        var map1Value = map1.get(nums1[i]);
        map1.set( nums1[i], ( map1Value ? map1Value : 0 ) + 1 );
    }
    
    for(var i = 0; i < nums2.length; i++) {
        if( map1.has(nums2[i]) && map1.get(nums2[i]) != 0 ) {
            number.push(nums2[i]);
            map1.set( nums2[i], map1.get(nums2[i]) - 1 );
        }
    }
    
    return number;
};

八、找出一個(gè)數(shù)組中只出現(xiàn)一次的數(shù)字

給定一個(gè)非空整數(shù)數(shù)組,除了某個(gè)元素只出現(xiàn)一次以外,其余每個(gè)元素均出現(xiàn)兩次。找出那個(gè)只出現(xiàn)了一次的元素。

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
    
    let number = 0;
    for(let i = 0; i < nums.length; i++) {
        number ^= nums[i];
    }
    return number;
};

以上是“javascript數(shù)組中常用的操作有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI