從零開始構建自己的js庫工具庫(二)——10個js處理陣列的方法
javascript對於陣列物件有很多函式,熟練的運用這些函式,對於我們日常的工作有很大的幫助。
下面簡單的分享一下10個簡單的js對於處理陣列的方法,希望能拋磚引玉。
1,陣列去重複,這個的實現原理和過程就是遍歷原來的陣列arrOld
,判斷arr有沒有當前遍歷到的陣列元素,沒有加新增進去
function removeReapt(arrOld){
var arr=[];
for(var i=0,len=arrOld.length;i<len;i++){
if(arr.indexOf(arrOld[i])==-1){
arr.push(arrOld[i]);
}
}
return arr;
}
removeReapt([1,2,3,6,5,2,2,5,6,2,1]) // [1, 2, 3, 6, 5]
2,陣列最大值最小值,這一塊的封裝,主要是針對數字型別的陣列,是通過js的Math 物件來實現的,我們還可以通過遍歷陣列,比較每一個值的大小來封裝
function maxArr(arr){
return Math.max.apply(null,arr);
}
function minArr(arr){
return Math.min.apply(null,arr);
}
maxArr([1,4,65,843,2,1,4]) // 843
minArr([1,4,65,843,2,10,4]) // 1
3,陣列求和,平均值,這一塊的封裝,主要也是是針對數字型別的陣列。其中對於平均值小數點可能會有很多位,這裡沒有做處理。如果要處理,我們可以用js的向下取整Math.floor或者向上取整Math.ceil等函式來實現
//求和
function sumArr(arr){
var sumText=0;
for(var i=0,len=arr.length;i<len;i++){
sumText+=arr[i];
}
return sumText
}
// 平均值
function covArr(arr){
var sumText=sumArr(arr);
var covText=sumText/arr.length;
return covText
}
sumArr([1,4,65,843,2,1,4]) // 920
covArr([1,4,65,843,2,1,4]) // 131.42857142857142
4,從陣列中隨機獲取元素
function randomOne(arr) {
return arr[Math.floor(Math.random() * arr.length)];
}
randomOne([1,2,3,6,8,5,4,2,6]) // 1
5,返回對應元素在陣列中的下標
function isHasElementOne(arr,value){
for(var i = 0,vlen = arr.length; i < vlen; i++){
if(arr[i] == value){
return i;
}
}
return -1;
}
isHasElementOne([1,2,3,4,5],3) // 2
6,返回陣列(字串)一個元素出現的次數
function getEleCount (obj, ele) {
var num = 0;
for (var i = 0, len = obj.length; i < len; i++) {
if (ele == obj[i]) {
num++;
}
}
return num;
}
getEleCount('asd56+asdasdwqe','a') // 3
getEleCount([1,2,3,4,5,66,77,22,55,22],22) // 2
7,得到n1-n2下標的陣列,即返回陣列下標arr[n1]
到陣列arr[n2]
的值
function getArrayNum(arr,n1,n2){
var arr1=[],len=n2||arr.length-1;
for(var i=n1;i<=len;i++){
arr1.push(arr[i])
}
return arr1;
}
getArrayNum([0,1,2,3,4,5,6,7,8,9],5,9) // [5, 6, 7, 8, 9]
8,篩選陣列,這裡所做的就只是刪除相應的陣列,大家可以按需要擴充套件
/* arr:要進行操作的陣列
val:要刪除的值
type: 如果有值,則刪除陣列中所有含有val值的元素,如果沒值或者不指定,則刪除必須完全匹配val的值
*/
function removeArrayForValue(arr,val,type){
return arr.filter(function (item) {
return type? item.indexOf(val) === -1 : item !== val
})
}
removeArrayForValue(['test','test1','test2','test','aaa'],'test','%') // ["aaa"]
removeArrayForValue(['test','test1','test2','test','aaa'],'test')
// ["test1", "test2", "aaa"]
9,根據id的值獲取相應的item值,並存入相應的目標陣列,如果陣列裡面的物件裡面還有children
的item的時候,我們可以使用遞迴
function findItemByOrgModuleId(arr, id, resArr) {
arr.forEach(function(item){
if (item.id === id) {
resArr.push(item);
}
});
return resArr;
}
var resArr = []; // 存放結果的目標陣列
var arr = [
{id:1,name:'aaa'},
{id:2,name:'bbb'},
{id:3,name:'ccc'},
{id:4,name:'ddd'},
{id:4,name:'555'},
]; // 要操作的陣列
findItemByOrgModuleId(arr,4,resArr) // [{id:4,name:'ddd'},{id:4,name:'555'}]
10,根據id來刪除陣列中相應id的物件,這裡預設所有的id都是唯一的
function deleteById(arr, id) {
arr.forEach(function(item, i){
if (item.id === id) {
arr.splice(i, 1);
}
});
return arr;
}
var arr = [
{id:1,name:'aaa'},
{id:2,name:'bbb'},
{id:3,name:'ccc'},
{id:4,name:'ddd'},
{id:5,name:'555'},
]; // 要操作的陣列
deleteById(arr,5)
// [{id:1,name:'aaa'},{id:2,name:'bbb'},{id:3,name:'ccc'},{id:4,name:'ddd'}];
如果arr中的item值有子元素話,我們需要遍歷,如下
// 如果arr物件如下所示
var arr = [
{id:1,name:'aaa'},
{id:2,name:'bbb'},
{id:3,name:'ccc'},
{id:4,name:'555'},
{id:5,name:'555',children: [
{id: 6,name:'666'},
{id: 7,name:'777'},
{id: 8,name:'888'},
]},
]
function deleteById(arr, id) {
arr.forEach(function(item, i){
if (item.id === id) {
arr.splice(i, 1);
}
if (item.children && item.children.length) {
deleteById(item.children, id);
}
});
return arr;
}
deleteById(arr,6)
結果返回了將id
等於6的值刪除之後的新的陣列。如下圖所示
附加:下面是js的陣列常用的常用api,具體的使用方法大家可以參考相應的w3cschool相應的api
的demo。
concat():連線兩個或更多的陣列,並返回結果
join():把陣列的所有元素放入一個字串。元素通過指定的分隔符進行分隔
pop():刪除並返回陣列的最後一個元素
push():向陣列的末尾新增一個或更多元素,並返回新的長度
reverse():顛倒陣列中元素的順序
shift():刪除並返回陣列的第一個元素
slice():從某個已有的陣列返回選定的元素
sort():對陣列的元素進行排序
splice():刪除元素,並向陣列新增新元素
toString():把陣列轉換為字串,並返回結果
unshift():向陣列的開頭新增一個或更多元素,並返回新的長度
valueOf():返回陣列物件的原始值
結語:此篇文章是受了 編寫自己的程式碼庫(javascript常用例項的實現與封裝 作者的啟發。
文章中加了自己的一些測試資料和自己工作用到的幾個庫,希望能給大家帶來一點啟發。
來自一個奔跑在前端路上的前端小白。
相關文章
- 從零開始構建自己的第一個vue專案Vue
- JS陣列的方法JS陣列
- 封裝一個自己的js庫封裝JS
- JS陣列去重的10種方法JS陣列
- JS 陣列的迭代方法JS陣列
- 一個日期處理類庫moment.jsJS
- js 陣列方法JS陣列
- 【JS】JS陣列新增元素的三種方法JS陣列
- js 陣列的方法小結JS陣列
- Python 從零開始構建自己的比特幣區塊鏈系統Python比特幣區塊鏈
- 從零開始構建一個webpack專案Web
- 幾何庫從零開始
- js陣列物件相同項合併處理JS陣列物件
- 專案常用JS方法封裝(四) [ 陣列相關處理 ]JS封裝陣列
- JS刪除陣列裡的某個元素方法JS陣列
- [譯] 如何用 Python 從零開始構建你自己的神經網路Python神經網路
- JS陣列基本方法JS陣列
- js常用陣列方法JS陣列
- Js陣列方法解析JS陣列
- js陣列方法集合JS陣列
- 簡單的js工具庫JS
- 使用node.js構建命令列工具Node.js命令列
- 2024-05-10 js 常用陣列方法JS陣列
- 提高JS原生方法效能的JS庫 -- loadashJS
- php 陣列傳到前端 js進行處理PHP陣列前端JS
- hyperf從零開始構建微服務(二)——構建服務消費者微服務
- 從0開始構建一個瀚高資料庫Docker映象資料庫Docker
- 構建Vue.js元件的10個技巧Vue.js元件
- ?從零開始Docker化你的Node.js應用DockerNode.js
- js 物件轉為js陣列 && Object方法JS物件陣列Object
- JS中陣列物件的基本結構JS陣列物件
- js 一維陣列轉二維陣列JS陣列
- js 二維陣列轉一維陣列JS陣列
- js陣列方法詳解JS陣列
- js陣列方法之ReduceJS陣列
- js陣列方法(管飽)JS陣列
- JS陣列方法總結JS陣列
- JS陣列字串方法整理JS陣列字串
- JS陣列Array的全部方法彙總JS陣列