前端小测第八期(js基础测试)

前端小测-JS 基础题目(数组相关):

简答题:

已知数组:

1
let arr = [0, 1, 2, 3, 4, 5];

1.请实现,指定任意索引,对应数组项往前移动一个位置

2 请实现,指定任意索引,对应数组项移动到最前面

3.请实现,指定任意索引,对应数组项移动到最后面

4.请手写一个方法,实现数组任意两项的位置调换.

可以写一个通用的方法,传递数组的索引作为参数来进行移动.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//交换两个指定项的数据
Array.prototype.moveIndex = function (i, j) {
var len = this.length;
if (i < 0 || i > len - 1) {
return new Error("索引超出范围");
}
var arr = this.concat();
if (j < 0) {
arr.splice(i, 1);
arr.unshift(this[i]);
} else if (j > len - 1) {
arr.splice(i, 1);
arr.push(this[i]);
} else {
arr.splice(i, 1, this[j]);
arr.splice(j, 1, this[i]);
}
return arr;
};

Array.prototype.moveIndexToStart = function (i) {
return this.moveIndex(i, -1); //小于0即可
};

Array.prototype.moveIndexToEnd = function (i) {
return this.moveIndex(i, this.length); //大于等于length即可
};

Array.prototype.moveIndexToPre = function (i) {
return this.moveIndex(i, i - 1);
};

var arr = [0, 1, 2, 3, 4, 5];

var arr1 = arr.moveIndexToStart(2);
var arr2 = arr.moveIndexToEnd(0);
var arr3 = arr.moveIndexToPre(2);

var arr4 = arr.moveIndex(1, 3); //交换位置

var arr5 = arr.moveIndex(-1, 3);

console.log("任意索引,对应数组项移动到最前面\n", arr1);
console.log("任意索引,对应数组项移动到最后面\n", arr2);
console.log("指定任意索引,对应数组项往前移动一个位置\n", arr3);

console.log("实现数组任意两项的位置调换\n", arr4);

console.log(arr5);

控制台打印截图:

控制台打印结果

大佬点评

  • 更兼容的方法:临时变量存储交换;
  • 支持 ES6:[ arr[i1], arr[i2] ] = [ arr[i2], arr[i1] ];
  • 索引合法性判断考虑负的范围( -1 * length → length - 1);
  • 数组所有的位置移动本质上都是位置交换!(纠正下:移到最前面和最后面不是位置交换)