Array常用方法總結
一、【常用語法】
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);(後臺接收)