首頁 >web前端 >js教程 >javascript數組中常用的操作介紹(程式碼範例)

javascript數組中常用的操作介紹(程式碼範例)

不言
不言轉載
2019-03-19 11:02:192512瀏覽


本篇文章帶給大家的內容是關於javascript陣列中常用的操作介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

一、不改變原數組,返回新數組(字串)

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

2、join()  把陣列中所有的元素放入到一個字串中,回傳字串

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

3、slice()    從開始到結束(不包含結束)選擇數組的一部分淺拷貝到一個新數組

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()   創建一個新的數組並返回,其中新數組的每一個元素由調用原始數組中的每一個元素執行提供的函數得來,原始數組不變

5、every()  對數組中的每一個元素都執行一次指定的回調函數,直到回呼函數返回false,此時every()返回false並不再繼續執行,如果回呼函數都對每一個元素都回傳true,那麼every()會傳回true。

6、some()  對數組中的每一個元素都執行一次指定的回呼函數,直到回呼函數傳回true,此時some()回傳true並不再執行。如果回呼函數對每個元素都回傳false,那麼some()就會回傳false。

7、filter()   建立一個新數組,其中包含透過所提供函數實現的測試的所有元素。

二、改變原數組

1、forEach()   針對每個元素執行所提供的函數。會修改原來的數組,不會回傳執行結果,回傳undefined。

2、pop()   刪除陣列最後一個元素,傳回被刪除的元素的值,如果陣列為空,則不改變數組,傳回undefined。

3、push()   在陣列末端新增一個或多個元素,傳回改變後陣列的長度。

4、reverse()   顛倒陣列中元素的位置,傳回該陣列的參考。

5、shift()   從陣列中刪除第一個元素,改變原始數組,並傳回該元素的值。

6、unshift()   將一個或多個元素加入陣列的開頭,並傳回新陣列的長度。

7、sort()   將陣列的元素進行排序,傳回陣列。排序不一定是穩定的。預設排序順序是根據字串unicode碼點。

8、splice()   在陣列中新增/刪除元素,然後傳回已刪除的新陣列()。

var a  = [1,2,3,4,5];
a.splice(0,1);     //删除从0位置开始的1个   返回[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()的差異

答案: 1、for in 遍歷物件可以列舉的屬性名稱列表,包括[[prototype]]原型鏈;

2、Object.keys() 只尋找屬性名稱是否在物件中,傳回一個數組,包含所有可以列舉的屬性名稱;

3、Object.getOwnPropertyNames()只找出屬性名稱是否在物件中,傳回一個數組,包含所有的屬性名,不論是否可列舉。

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

for of 語句:遍歷可迭代物件的可列舉屬性值列表,包括[[propertype] ]原型鏈;

object.values() :傳回一個給定物件本身的所有可枚舉屬性的值,不包括原型鏈。

四、ES6語法Map鍵值對轉換為陣列

#new Map建立一個map

// new Map创建一个map
let map = new Map([[1,"one"], [2,"two"], [3,"three"]]);
map.set(4, "four");
// 获取所有键值对
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数组")
console.log([...map]) // 输出[[1, "one"], [2, "two"], [3, "three"], [4, "four"]]

五、兩個升序的數組合併成一個升序數組

1、時間複雜度O(M N),空間複雜度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、時間複雜度O(M N),空間複雜度O(1)

   // m, n 是数组长度
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;
}

六、陣列重複問題

(一)陣列去重

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]

(二)排序陣列去重

/**
 * @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;
};

(三)判斷數組是否存在重複

/**
 * @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;
};

七、兩個數組的交集

給定兩個數組,寫一個方法來計算它們的交集。

例如:

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

#注意: 1、出結果中每個元素出現的次數,應與元素在兩個數組中出現的次數一致。2、

我們可以不考慮輸出結果的順序。
跟進:1、如果給定的陣列已經排好序呢?你將如何最佳化你的演算法?2.如果nums1 的大小比nums2 小很多,哪種方法更優?3、如果nums2的元素儲存在磁碟上,記憶體是有限的,你不能一次載入所有的元素到記憶體中,你該怎麼辦?

解法:

/**
 * @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;
};

#八、找出一個陣列中只出現一次的數字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

/**
 * @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;
};

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的JavaScript教程视频栏目!

以上是javascript數組中常用的操作介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除