js实现数组相邻两项换位置
时间: 2024-01-21 10:02:24 浏览: 119
可以使用以下代码实现:
```javascript
function swapAdjacentItems(arr) {
for (let i = 0; i < arr.length - 1; i += 2) {
const temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
return arr;
}
const arr = [1, 2, 3, 4, 5, 6];
console.log(swapAdjacentItems(arr)); // [2, 1, 4, 3, 6, 5]
```
上述代码中,我们通过循环遍历数组,每次交换相邻两项的位置。需要注意的是,循环次数应该是数组长度减一,因为每次交换都会影响两个元素的位置。
相关问题
js数组对象中,如果相邻两项相等,记住下标
可以使用一个变量记录上一个元素的值和下标,每遍历到一个新元素,就和上一个元素进行比较,如果相等,就记住下标。具体实现可以参考以下代码:
```javascript
let arr = [1, 2, 2, 3, 4, 4, 4, 5];
let prev = { value: null, index: null };
let result = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] === prev.value) {
result.push(prev.index, i);
}
prev = { value: arr[i], index: i };
}
console.log(result); // [2, 3, 5, 6]
```
这里使用了一个 `prev` 对象来记录上一个元素的值和下标,初始值设为 `{ value: null, index: null }`。在遍历数组时,每次都将当前元素和 `prev.value` 进行比较,如果相等,就将 `prev.index` 和当前下标 `i` 记录到结果数组中。最后输出结果数组即可。
js数组元素随机排序
### 实现 JavaScript 数组元素的随机排序
在 JavaScript 中,可以采用多种方法来实现数组元素的随机排序。一种常见的方式是通过修改标准的冒泡排序或其他简单排序算法,在比较两个相邻元素时引入随机因素[^4]。
更高效且被广泛认可的做法是基于 Fisher-Yates 洗牌算法(也称为 Knuth Shuffle),该算法能确保每次执行都能均匀分布地打乱数组顺序而不会偏向某些特定排列方式。具体来说:
对于给定的一个长度为 `n` 的数组 `arr` ,遍历这个数组的同时不断选取当前索引之后的位置作为目标位置,并交换这两个位置上的值直到整个过程结束。这种方法的时间复杂度为 O(n),能够有效地完成任务[^1]。
下面是一个具体的函数实现例子,它接收一个参数即待处理的数组对象,并返回经过随机化后的版本:
```javascript
function randomSort(arr) {
let currentIndex = arr.length;
while (currentIndex !== 0) {
// 获取剩余未处理部分中的任意一项下标
const randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// 将该项与最后一项互换位置
[arr[currentIndex], arr[randomIndex]] = [
arr[randomIndex],
arr[currentIndex]
];
}
return arr;
}
```
此代码片段展示了如何使用 ES6 解构赋值语法简化两变量间的值交换操作;同时利用了 `Math.random()` 函数配合取整运算符 (`Math.floor`) 来获取指定范围内的伪随机数以决定要交换的目标位置。
另外还有一种较为简单的做法就是直接调用内置 `.sort()` 方法并传递自定义比较器,使得其行为变得不可预测从而达到近似效果。不过需要注意的是这种方式并不推荐用于生产环境因为它的概率分布不是完全公平的:
```javascript
var arr = [1, 2, 3, 4, 5];
arr.sort(() => Math.random() - 0.5);
console.log(arr);
```
阅读全文