一、【常用语法】
1.1、数组的创建
var arrayObj = new Array(); //创建一个数组
var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度
var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); //创建一个数组并赋值
要说明的是,虽然第二种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度为5,仍然可以将元素存储在规定长度以外的,注意:这时长度会随之改变。
1.2、数组的元素的访问
var testGetArrValue=arrayObj[1]; //获取数组的元素值
arrayObj[1]= "这是新值"; //给数组元素赋予新的值
1.3、数组元素的添加
arrayObj. push([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组【结尾】,并返回数组新长度
arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组【头部】,数组中的元素自动后移,返回数组新长度
arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);//将一个或多个新元素【插入】到数组的【指定位置】,插入位置的元素自动后移,返回""。
1.4、数组元素的删除
arrayObj.pop(); //移除【结尾】一个元素并返回该元素值
arrayObj.shift(); //移除【头部】一个元素并返回该元素值,数组中元素自动前移
arrayObj.splice(deletePos,deleteCount); //删除从【指定位置】deletePos开始的【指定数量】deleteCount的元素,数组形式返回所移除的元素
1.5、数组的截取和合并
arrayObj.slice(start, [end]); //以数组的形式【返回数组的一部分[start,end)】,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素
arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); //将多个数组(也可以是字符串,或者是数组和字符串的混合)【连接】为一个数组,返回连接好的新的数组
1.6、数组的拷贝
arrayObj.slice(0); //返回数组的拷贝数组[0,...],注意是一个新的数组,不是指向
arrayObj.concat(); //返回数组的拷贝数组【连接为空】,注意是一个新的数组,不是指向
1.7、数组元素的排序
arrayObj.reverse(); //【颠倒】元素顺序(最前的排到最后、最后的排到最前),返回数组地址
arrayObj.sort(); //对数组元素排序,返回数组地址
1.8、数组元素的字符串化
const separator = '/';
arrayObj.join(separator); //返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。
//提醒:toLocaleString 、toString 、valueOf:可以看作是join的特殊用法,不常用
二、【数组对象的3个属性的理解】
2.1、length 属性
Length属性表示数组的长度,即其中元素的个数。因为数组的索引总是由0开始,所以一个数组的上下限分别是:0和length-1。
和其他大多数语言不同的是,JavaScript数组的length属性是可变的,这一点需要特别注意。
当length属性被设置得更大时,整个数组的状态事实上不会发生变化,仅仅是length属性变大;
当length属性被设置得比原来小时,则原先数组中索引大于或等于length的元素的值全部被丢失。如:
var arr=[12,23,5,3,25,98,76,54,56,76];
alert(arr.length);//10
arr[15]=34;
alert(arr.length);//16,其中arr=[12,23,5,3,25,98,76,54,56,76,,,,,,34]
2.2、prototype 属性
返回对象类型原型的引用。prototype 属性是 object 共有的。
objectName.prototype
objectName 参数是object对象的名称。
//说明:用 prototype 属性提供对象的类的一组基本功能。 对象的新实例【“继承”赋予该对象原型的操作(方法)】。
对于数组对象,以以下例子说明prototype 属性的用途。
给数组对象添加返回数组中最大元素值的方法。要完成这一点,声明一个函数,将它加入 Array.prototype, 并使用它。如:
function array_max(){
var i,
max = this[0];
for (i = 1; i < this.length; i++){
if (max < this[i])
max = this[i];
}
return max;
}
Array.prototype.max = array_max;//数组prototype‘继承’该方法!!!
var x = new Array(1, 2, 3, 4, 5, 6);
var y = x.max();
2.3、constructor 属性
表示创建对象的函数。
object.constructor //object是对象或函数的名称。
//说明:constructor 属性是所有具有 prototype 的对象的成员。它们包括除 Global 和 Math 对象以外的所有 JScript 固有对象。constructor 属性保存了对【构造特定对象实例的函数的引用】。
例如:
x = new String("Hi");
if (x.constructor == String) // 进行处理(条件为true)。
或
function MyFunc {
// 钩子函数
}
三、【实际操作】
3.1.替换数组中的部分元素
for (let i = 0; i < tableData.length; i++) {
tableData[i].begin_time = momenttableData[i].begin_time, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss');
tableData[i].end_time = moment(tableData[i].end_time, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss');
}
3.2.合并相同的元素
mergeArrykey(result,key) {
let map = {},
dest = [];
for (let i = 0; i < result.length; i++) {
let ai = result[i];
if (!map[ai.key]) {
dest.push({
key: ai.key,//过滤参数key
id: ai.id,
data: [ai]
});
map[ai.key] = ai;
} else {
for (let j = 0; j < dest.length; j++) {
let dj = dest[j];
if (dj.key == ai.key) {
dj.data.push(ai);
break;
}
}
}
}
return dest
}
3.求多维数组极值
//对维数组--单一数组:arr.join(",").split(",");//数组元素都成了字符串!!!
Math.max.apply(Math, arr.join(",").split(",")) //最大值
Math.min.apply(Math, arr.join(",").split(",")) //最小值
4.矩阵转换:key value互换
const arr = [];//需要处理的数据
const arr_new = [];
for (let i = 0; i < arr[0].length; i++) {
arr_new[i] = [];//1.设置length
}
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length; j++) {
arr_new[j][i] = arr[i][j];//2.1.key value互换:读取arr
}
}
for (let i = 0; i < arr_new.length; i++) {
for (let j = 0; j < arr_new[i].length; j++) {
arr_new[i][j];//2.2.key value互换:替换到新数组arr_new
}
}
5.数组重构:
const arr_new = [];//需要处理的数据
const seriesOptions = [];//重构后的数组
arr_new.map((item, index) => {
let obj = {};
obj.value = item.id;//后台接受的值
obj.lable = item.name;//显示的值
seriesOptions.push(obj);
});
this.seriesOptions = seriesOptions;
6.计算数组中相同元素的个数:元素名称+数量
//1.只需要获取数量,输出newArr=[1,2,3,4,...]
checkArrayKey(arr) {
let newArr = [];
for (let i = 0; i < arr.length;) {
let count = 0;
for (let j = i; j < arr.length; j++) {
if (arr[i] === arr[j]) {
count++;
}
}
newArr.push(count);
i+=count;
}
return newArr
}
//2.得到一个新的数组:元素名称+数量+合并后的分类
checkArray(arr) {
var newArr = [];
for (var i = 0; i < arr.length;) {
var count = 0;
for (var j = i; j < arr.length; j++) {
if (arr[i] === arr[j]) {
count++;
}
}
newArr.push({
date: arr[i],
count: count
})
i+=count;
}
for (var k = 0; k < arr.length; k++) {
return newArr[k]
}
}
其他常用转换:
//.1.字符串转数组:str.split(',');
var str = '1,2,3,4,巴德,merge';
var arr = str.split(',');
console.log(arr); // ["1", "2", "3", "4", "巴德", "merge"] 数组
console.log(arr[4]); // 巴德
//2.数组转字符串:arr.join(',');
var arr = [1,2,3,4,'巴德','merge'];
var str = arr.join(',');
console.log(str); // 1,2,3,4,巴德,merge
//3.字符串对象--对象字符串
var str = '1,2,3,4,巴德,merge';
var arr = str.split(',');//["1", "2", "3", "4", "巴德", "merge"]
var strify = JSON.stringify(arr);//json字符串数组:’["1", "2", "3", "4", "巴德", "merge"]‘
var arrParse = JSON.parse(strify);//json数组:["1", "2", "3", "4", "巴德", "merge"]
【json字符串对象】:var str='{ "name": "John" }';
var obj = str.toJSONString() 或 JSON.parse(str);(前端渲染)
【json对象字符串】:var json = {name: "zhangsan", age: 23, email: "[email protected]"};
var jsonStr = JSON.stringify(json);(后台接收)