您的位置:首页 > 其它

给数组随机排序

2016-03-23 08:53 274 查看

随机排序

Array.prototype.shuffle = function() {
var input = this;

for (var i = input.length-1; i >=0; i--) {

var randomIndex = Math.floor(Math.random()*(i+1));
var itemAtIndex = input[randomIndex];

input[randomIndex] = input[i];
input[i] = itemAtIndex;
}
return input;
}

var tempArray = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
tempArray.shuffle();

// and the result is...
alert(tempArray);


添加数组项

给数组末尾添加一个或多个数组项:

var arr = [];
arr.push('a','b');
console.log(arr); // ['a','b']
在数组的前面添加一个或多个数组项:

var arr = ['a','b'];
arr.unshift(1,2);
console.log(arr); // [1, 2, "a", "b"]
使用splice()方法给数组添加数组项:

var arr = ['a','b','c',1,2];
arr.splice(2,0,'d','c','e');//在索引为2处,0表示不删除,插入d、c、e
console.log(arr); // ["a", "b", "d", "c", "e", "c", 1, 2]
使用concat()方法可以给数组添加数组项,只不过使用这种方法不会改变原数组:

var arr = ['a','b','c'];
var arr2 = arr.concat('d',1,2,['e',3]);
console.log(arr); // ["a", "b", "c"]
console.log(arr2); // ["a", "b", "c", "d", 1, 2, "e", 3]


删除数组项

从数组的末尾删除一个数组项:

var arr = ['a','b','c','d',1,2];
arr.pop();
console.log(arr); // ["a", "b", "c", "d", 1]
删除数组的第一项:

var arr = ['a','b','c','d',1,2];
arr.shift();
console.log(arr); // ["b", "c", "d", 1, 2]
给一个数组中删除多个数组项,只不过不同的是,slice()不会影响原数组,只是会在原数组基础上创建一个数组副本:

var arr = [1,2,3,4,'a','b'];var arr2 = arr.slice(2);
console.log(arr); // [1, 2, 3, 4, "a", "b"]
console.log(arr2); // [3, 4, "a", "b"]console.log(arr3); // ["a", "b"]
splice()方法除了能给数组添加数组项之外,还可以给数组删除数组项,会改变原数组:

var arr = [1,2,3,4,'a','b','c'];
var arr2 = arr.splice(2,2); //索引为2处,开始删除2项
console.log(arr); // [1, 2, "a", "b", "c"]
console.log(arr2); // [3, 4]
数组的查询提取:

var arr = [1,2,3,4,5,6];
var arr2 = arr.slice(-3);
console.log(arr); // [1, 2, 3, 4, 5, 6]
console.log(arr2); // [4, 5, 6]

复制数组

错误实现:
var array1 = new Array("1","2","3");
var array2;
array2 = array1;
array1.length = 0;
alert(array2); //返回为空
这种做法是错的,因为javascript分原始类型与引用类型(与java、c#类似)。Array是引用类型。array2得到的是引用,所以对array1的修改会影响到array2。

使用slice()
可使用slice()进行复制,因为slice()返回也是数组。

var array1 = new Array("1","2","3");
var array2;
array2 = array1.slice(0);
array1.length = 0;
alert(array2); //返回1、2、3


使用concat()

注意concat()返回的并不是调用函数的Array,而是一个新的Array,所以可以利用这一点进行复制。

var array1 = new Array("1","2","3");
var array2;
array2 = array1.concat();
array1.length = 0;
alert(array2); //返回1、2、3

总结

这里简单的整理了一个数组的增、删、改、查的相关方法。简单的总结一下:

增加数组项方法:除了直接改变数组项的值和修改数组的length给数组添加数组项方法之外,还可以使用push()、unshift()、concat()和splice()添加数组项

删除数组项方法:删除数组项方法有pop()、shift()、slice()和splice()方法

改变数组项方法:在数组中主要通过splice()方法来改变数组项

查询数组项方法: 查询数组项方法其实就是对数组做查询提取功能,主要使用的方法是slice()方法

复制数组注意,Array是引用类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: