2017年9月8日 星期五

array 的 pop、shift、splice 用法

都是刪除

※使用方法

let arr = new Array("a", "b", "c", "d", "e");
console.info(arr); // a b c d e
    
// pop 刪除最後一個元素,返回值為被刪除的元素
// let pop = arr.pop();
// console.info(arr); // a b c d
// console.info(pop); // e
    
// shift 刪除第一個元素,返回值為被刪除的元素
// let shift = arr.shift();
// console.info(arr); // b c d e
// console.info(shift); // a
    
// splice 最靈活的刪除,也可適情況新增
// 第一個參數,表示從指定的索引開始刪到最後,必要
// 第二個參數,表示從第一個參數之後的索引開始刪除幾個元素,非必要
// 第三個參數是「...」,刪除的索引可從第三個參數之後加入這裡輸入的元素,非必要
let splice = arr.splice(2, 3, "f", "g");
console.info(arr); // a b f g
console.info(splice); // c d e




※splice 刪除常見錯誤

let arr = new Array("a", "b", "c", "d", "e");
console.info(arr); // a b c d e
    
// for(let i=0; i<arr.length; i++) {
//     if(arr[i] == "a" || arr[i] == "b") {
//         arr.splice(i, 1);
//         // i--;
//     }
// }
    
arr.forEach((value, i) => {
    if(value == "a" || value == "b") {
        arr.splice(i, 1);
        // i--; 無效
    }
});
    
// 以下是用 jQuery 的 each,也是一樣的情形
// $(arr).each((i, value) => {
//     if(value == "a" || value == "b") {
//         arr.splice(i, 1);
//         i--; 無效
//     }
// });
    
// $.each(arr, (i, value) => {
//     if(value == "a" || value == "b") {
//         arr.splice(i, 1);
//         i--; 無效
//     }
// });
console.info(arr); // b c d e,非預期的 c d e

※以上都是 index 刪除後會自動往上一格,所以可用 i-- 來解決,但 forEach 是無效的

沒有留言:

張貼留言