<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
/*
* splice(start, deleteCount, data1, data2, data3...)
* */
var arr = [‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘];
//1, 3
//    [8,6,4]
//[‘a‘,8,6,4]
//arr.splice(-5);
//console.log(arr);
function arrSplice(data, start, deleteCount) {
    // 如果start不是数字,或不能转成数字,start默认就为0
    if (isNaN(start)) {
        start = 0;
    }
    start = Number(start);
    // 如果start是负数
    if (start < 0) {
        start = data.length + start;
    }
    if (start < 0) {
        start = 0;
    }
    // 如果deleteCount没传
    if (deleteCount == undefined) {
        deleteCount = data.length - start;
    }
    /*
    * 1. 准备一个空的数组,用于存放最后的结果
    * 2. 循环源数组
    *   1. 得到当前循环过程中的下标
    *   2. 把这个下标和start做比较
    *       1. 如果当前下标小于start,则把当前数组添加到新数组中
    *       2. 否则
    *           1. 是否有新增数据
    *               1. 如果有新在数据,则把新增数据添加到新数组中
    *           2. 否则,如果deleteCount大于0,忽略这个数据,并对deleteCount--
    *               否则,把当前数据添加到新数组中
    * */
    var newArr = [];
    //新增数据
    var newData = [];
    if (arguments.length > 3) {
        for (var i=3; i<arguments.length; i++) {
//            newData.push(arguments[i]);
            newData[newData.length] = arguments[i];
        }
    }
    for (var i=0; i<data.length; i++) {
        if (i < start) {
//            newArr.push(data[i]);
            newArr[newArr.length] = data[i];
        } else {
            if (newData.length) {
                //有新增数据的
//                newArr = newArr.concat(newData);
                for (var j=0; j<newData.length; j++) {
                    newArr[newArr.length] = newData[j];
                }
                newData.length = 0;
            }
            if (deleteCount > 0) {
                deleteCount--;
            } else {
//                newArr.push(data[i]);
                newArr[newArr.length] = data[i];
            }
        }
    }
data = newArr;
    console.log(data);
}
</script>
</body>
</html>
每天一个JS 小demo之原生数组splice方法书写。主要知识点:锻炼思维逻辑能力,对于数组方法的理解和各种情况的考量
原文:http://www.cnblogs.com/catEatBird/p/6947411.html