每天一個JS 小demo之原生數組splice方法書寫。主要知識點:鍛煉思維邏輯能力,對於數組方法的理解和各種情況的考量
<!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方法書寫。主要知識點:鍛煉思維邏輯能力,對於數組方法的理解和各種情況的考量