我们有一个要求,我们必须编写一个函数来反转数组,但不能更改数组中存在的特殊字符的索引,例如下面的示例:
如果'#'是那个特殊字符,则下面的数组,
[18,-4,'#',0,8,'#',5]
应该返回-
[5, 8, "#", 0, -4, "#", 18],
此处,数字反转,但保留其索引的“#”除外。
让我们为此编写代码。
我们将在此处使用两指针方法,起点和终点分别指向数组的最左端和最右端。
如果在任何索引处找到特殊字符,我们将跳过该索引并继续迭代,当找到没有特殊字符的索引对时,我们将交换它们的值,并在起始指针小于正确的指针。
const arr = [18,-4,'#',0,8,'#',5]; const reverseArray = (arr, special) => { let start = 0, end = arr.length - 1, temp; while(start < end){ if(arr[start] === special){ start++; continue; }; if(arr[end] === special){ end--; continue; }; temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; }; }; reverseArray(arr, '#'); console.log(arr);
输出结果
控制台中的输出将为-
[ 5, 8, '#', 0, -4, '#', 18 ]