『壹』 js中操作數組的幾個常用方法
1.
Array.shift()------刪除並返回第一個元素
作用:從數組中刪除第一個元素(即下標為0的元素),並返回該元素。
注意:1)刪除元素之後,數組的長度-1。2)如果數組是空的,那麼
shift()
方法將不進行任何操作,返回
undefined
值。
『貳』 介紹幾個js對數據常用的處理方式
獲取數據方式 數據獲取是指從各種設備獲得有關各業務所需的流量、IP、次數、協議等網路傳送的原始數據,從而對用戶進行管理和計費。一般通過以下三種方式獲取數據。 如果目前的IP寬頻網路的對用戶的接入採用的是以太區域網(LAN)的接入方式,則可
『叄』 js數組幾種常見的操作方法
關於js數組的用法有很多,下面主要針對一些簡單的操作,比如合並,反轉,添加刪除等簡單的操作總結一下。
關於js數組的用法有很多,下面主要針對一些簡單的操作,比如合並,反轉,添加刪除等簡單的操作總結一下。
第一:讀取數組 for循環
方法如下:
var ay=[1,"sdsd","sdsd"]
for (var i=0;i<ay.length;i++) {
console.log("index:"+i+" "+ay[i]) //index:0 1 index:1 sdsd index:2 sdsd
}
第二:合並數組 concat
方法如下:
var arr1=['w','e','s'];
var arr2=['e','y','u'];
var arr3=arr1.concat(arr2);
console.log(arr3) //['w','e','s''e','y','u'];
第三:數組變為字元串格式 join
方法如下:
var arr1=['w','e','s'];
var arr4=arr1.join()
console.log(arr4) //w,e,s
第四:刪除最後一個元素,針對老數組是刪除最後一個,針對新數組是返回最後一個 pop
var arr6=["d","s","t"];
var arr7=arr6.pop();
console.log(arr6) //["d","s"];
console.log(arr7);// t
第五:添加最後一個元素,針對老數組最後一個元素後面添加一個元素,新數組返回元素個數 push
var arr8=["i","u","t"];
var arr9=arr8.push("k");
console.log(arr8); //["i","u","t","k"];
console.log(arr9); // 4
第六:shift() 和pop()一樣,不同的是操作的是開頭刪除的元素shift();具體操作不在展示
第七:unshiift()和push一樣,不同的是操作的是開頭添加的元素unshift();具體操作不再展示
第八:反轉數組 reverse
方法如下:
var arr1=['w','e','s'];
var arr10=arr1.reverse()
console.log(arr10) //['s','e','w'];
第九:數組排序 sort a-b正向 b-a 反向
正向
var arr11=[3,1,5,8,28]
var arr12=arr11.sort(function (a,b) {
return a-b;
})
console.log(arr12) //[1,3,5,8,28];
反向
var arr13=arr11.sort(function (a,b) {
return b-a;
})
console.log(arr13) //[28,8,5,3,1]
第十:數組截取 數組截取的方法主要有slice 和splice,另外說到截取我這里隨便也把字元串截取帶上,字元串截取的方法主要有substr 和substring
(1)slice 使用方法arr.slice(m,n);其中arr為數組,m,n為兩個參數,意思是從已有數組中返回選定的元素,截取位置均為下標,其中m必須,為起始位置,可以為負值,n為結束位置(截取位置並不包含)。
示例如下:
①只有起起始值,並且為正,默認的從起始位置一直到整個數組結束,起始下標從0開始
var arr=[2,3,5,6,8,9]
var arr1=arr.slice(1)
console.log(arr) //[2,3,5,6,8,9] 老數組是沒有變化的,下面不在列舉,都是一樣的
console.log(arr1) //[3,5,6,8,9] 只有起始參數,並且為正值,返回新數組從下標1開始截取
②只有起始值,並且為負,默認的是從起始位置一直到整個數組結束,此處沒有起始值,數組的最後一個下標是-1,比如此例,如果從-6開始取,必定是整個數組
var arr=[2,3,5,6,8,9]
var arr1=arr.slice(-1)
console.log(arr1) //[9] 只有起始參數,並且為負值,從數組尾部截取元素
③有起始值和結束值,並且為正,此處需注意下標是從小到大,比如你(3,1)肯定是取不到值的,另外截取的下標個數並不包含最後一個下標
var arr=[2,3,5,6,8,9]
var arr1=arr.slice(1,4)
console.log(arr1) //[3,5,6] 此時是從下標1開始到下標4,但是需要注意的是並不包含下標4,准確的說是1-3的下標
④有起始值和結束值,並且為負,此處需注意下秒也是從小到大,同理,比如(-1,-6)也是肯定取不到值的,另外截取的下標個數也並不包含最後一個下標
var arr=[2,3,5,6,8,9]
var arr1=arr.slice(-6,-1)
console.log(arr1) //[2,3,5,6,8]
⑤有起始值和結束值,並且正負都有
負值到0
var arr=[2,3,5,6,8,9]
var arr1=arr.slice(-1,0)
//剛剛都看到了,數組下標都是從小到大的,所以說如果正負都有的情況下,理論上應該可以取值的,比如這個例子,-1為9的小標,0為2的下標,所以取值應該為 [9],但是結果並不是這樣的
console.log(arr1) //[ ] 從這里可以看出他的結果是為空的,所以從負值到0結果是取不到的
負值到正直
var arr=[2,3,5,6,8,9]
var arr1=arr.slice(-1,2)
//那從負值到正值呢,同樣也是取不到值的
console.log(arr1) //[ ]
正直到負值
var arr=[2,3,5,6,8,9]
var arr1=arr.slice(2,-1)
//那從正直到負值,這個理論上是取不到的,但是看下結果
console.log(arr1) //[ 5,6,8] 從結果可以看出是可以取的 原理是2的下標為5,-1的下標為9,不包含結束位置下標
總結:這個方法看著可能會麻煩些(也可能被我寫的麻煩啦),比如正到負等,不知道大家都是怎麼操作,我一般用這個取值都是只截取正的,所以這個實際操作還是非常簡單的。
(2)splice 像數組中添加或者刪除元素
arr.splice(m,n,index,index1,...,indexx)
m是起始位置,n是刪除元素的個數,index是要添加的元素,在不添加元素的前提下,只有第一個參數是必須的,後面兩個都不是必須的,在需要添加元素的情況下,三個元素都是必須的,此方法和slice是不一樣的,這個返回的是被刪除的元素
示例如下:
只刪除不添加
注意看此例,是(1,2)刪除兩個,如果是(1,0),則表示刪除零個,也就是不刪除的意思,如果只有一個參數則表示從這里開始刪除,比如是(1)則為[2],當然這個也是可以取負值,但是這個和slice是不一樣的,只能起始位置取負值,因為刪除的個數不可能為負值,slice可以取(2,-1),這個就截然不同啦,但是剛剛也說啦,slice是不可以起始位置取負值,結束位置取正的,但是這個是可以的,比如(-1,0)則表示從-1開始刪除零個,結果為[2,3,5,6,8,9],(-6,2),結果為[5,6,8,9],另外這個刪除的第二個值如果寫的過大,也只是刪除從本下標到最後一個,比如(2,78)為[2,3]
var arr=[2,3,5,6,8,9]
var arr1=arr.splice(1,2)
console.log(arr) // [2,6,8,9] 注意看此處才是我們要的數組,從下標1開始刪除刪除兩個
console.log(arr1) //[3,5] 此處是我們刪除掉的數組
刪除加添加 具體的和上面的差不多,主要添加了添加元素的效果,這個也可以添加多個元素
var arr=[2,3,5,6,8,9]
var arr1=arr.splice(1,2,"il")
console.log(arr) //[2,"li",6,8,9]
console.log(arr1) //[3,5]
總結:此方法用的時候,一般也都是只取正值
(3)substr 這個是字元串的用法 用法arr.substr(m,n) m必選也可以負值 n選填,注意看這個並不是結束為止而是截取的個數
示例如下:
只有一個參數 默認從此下標開始,取後面所有的
正值
var arr="sdhgfhf"
var arr1=arr.substr(1)
console.log(arr)// "sdhgfhf"這個是不變的,下面不再列舉
console.log(arr1)//"dhgfhf" 從下標1開始取後面所有的
負值
var arr="sdhgfhf"
var arr1=arr.substr(-2)
console.log(arr1)//"hf" 從下標-2開始取後面所有的
兩個參數,從第一個下標開始,截取到下標2的長度
var arr="sdhgfhf"
var arr1=arr.substr(1,3)
console.log(arr1)//"dhg" 從下標1開始取後面所有的 同理如果為負值,比如(-6,3)則為"hjf";後面的始終為長度
總結:此方法需注意不要和數組的混淆,這個是截取長度的
(4)substring 用法arr.substring(m,n) 兩個參數,m必須,起始位置 ,n選填,截取下標的結束位置,此用法和上面slice有點類似,但是需要注意的是此方法是不支持負值的
示例如下:
只有一個參數
var arr="sdhgfhf"
var arr1=arr.substring(1)
console.log(arr1)//"dhgfhf"從下標1開始取後面所有的
兩個參數
var arr="sdhgfhf"
var arr1=arr.substring(1,3)
console.log(arr1)// "dh"從下標1開始截取到下標3,但是不包含3
總結:此方法不支持負值,只針對下標來截取的
最後,以上主要是總結的數組的一些簡單的操作方法,學無止境,繼續努力。
『肆』 JS對象創建常用方式有哪些
1.對象字面量創建對象
var obj = { a:1,b:2 };
注意:對象字面量是一個表達式,這種表達式每次運算都會創建並初始化一個新對象,並計算這個新對象的每個屬性值。所以如果在循環體內使用對象字面量,每次循環時都會創建新對象。
2.通過new運算符創建對象
var obj = new Object(); //創建空對象 var ary = new Array(); //創建空的數組對象
注意:new運算符後面跟的是一個函數調用,這個函數被稱為構造函數。js中原始類型都包含內置的構造函數,也可以自己定義構造函數。
3.通過立即執行函數創建對象
var obj = (function(){ return {x:1,y:2};}());
注意:在立即執行函數內部一定要有return語句,return出的內容就是待創建的對象。
4.通過Object.create()創建對象
var obj = Object.create({x:1,y:2});
注意:Object.create()是一個靜態函數,傳入原型對象就可以創建繼承此原型對象的對象,例如上面的例子中obj對象繼承了x,y屬性。
『伍』 js數組遍歷的常用的幾種方法以及差異和性能優化
<script type="text/javascript">
/*對比:
1、map速度比foreach快
2、map會返回一個新數組,不對原數組產生影響,foreach不會產生新數組,foreach返回undefined
3、map因為返回數組所以可以鏈式操作,foreach不能
4, map里可以用return ,而foreach里用return不起作用,foreach不能用break,會直接報錯*/
/*方法一:*/
var arr1 = [1, 2, 3, 4, 5, 6];
for(var i = 0, len = arr1.length; i < len; i++) { //優化性能處理
console.log(arr1[i], 'for遍歷出來的數據'); //每個item 1,2,3,4,5,6
}
/*方法二:*/
/*forEach方法中的function回調支持3個參數,第1個是遍歷的數組內容;第2個是對應的數組索引,第3個是數組本身*/
var arr2 = [{
name: 'bob',
age: 20
},
{
name: 'tom',
age: 18
},
{
name: 'sos',
age: 19
}
]
arr2.forEach((val, i) => { //沒有返回值的,對原來數組也沒有影響
console.log(val, '遍歷出來的每個obj')
});
/*方法三:*/
var fruits = [1, 2, 3, 4, 5, 6, 7, 8];
let arr = fruits.map((item, index) => {
console.log(item, 'top')
console.log(index, 'top')
return item * 8
})
console.log(arr, 'newarr') //[8, 16, 24, 32, 40, 48, 56, 64] "newarr"
var a = fruits.indexOf("Apple", 4);
console.log(a)
//for 和 forEach都是普通循環,map 帶返回值並且返回一個新數組;
/*
*當前元素的值,當期元素的索引值,當期元素屬於的數組對象;
語法:array.map(function(currentValue,index,arr), thisValue)
map() 方法返回一個新數組,數組中的元素為原始數組元素調用函數處理後的值。
map() 方法按照原始數組元素順序依次處理元素。
注意: map() 不會對空數組進行檢測。
注意: map() 不會改變原始數組。
* */
/*方法四:*/
/*兼容寫法:
不管是forEach還是map在IE6 - 8 下都不兼容( 不兼容的情況下在Array.prototype上沒有這兩個方法), 那麼需要我們自己封裝一個都兼容的方法:*/
/**
* forEach遍歷數組
* @param callback [function] 回調函數;
* @param context [object] 上下文;
*/
Array.prototype.myForEach = function myForEach(callback, context) {
context = context || window;
if('forEach' in Array.prototye) {
this.forEach(callback, context);
return;
}
//IE6-8下自己編寫回調函數執行的邏輯
for(var i = 0, len = this.length; i < len; i++) {
callback && callback.call(context, this[i], i, this);
}
}
/**
* map遍歷數組
* @param callback [function] 回調函數;
* @param context [object] 上下文;
*/
Array.prototype.myMap = function myMap(callback, context) {
context = context || window;
if('map' in Array.prototye) {
return this.map(callback, context);
}
//IE6-8下自己編寫回調函數執行的邏輯var newAry = [];
for(var i = 0, len = this.length; i < len; i++) {
if(typeof callback === 'function') {
var val = callback.call(context, this[i], i, this);
newAry[newAry.length] = val;
}
}
return newAry;
}
</script>
『陸』 如何封裝常用的JS方法
1、JS封裝就是盡量把使用的方式簡單化,內部邏輯和使用解耦。通俗的說就是使用的時候只需要知道參數和返回值,其他條件盡量不要使用人員進行設置。
2、JS封裝的方法有函數方式、對象的方式、閉包的方式。
舉例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1)函數方式
function kk(a,b){
內部對a,b怎麼處理就不需要關心了
}
2)對象方式
function kk(a,b){
this.x = a;
this.y = b;
}
var k = new kk(1,2);//通過面向對象的方式
alert(k.x);
3)閉包方式
function kk(a,b){
var k = 1;
return function tt(){
k++;
}
}
var u = kk(1,2);
u();//閉包實現累加
u();//閉包實現累加
『柒』 javascript有哪些方法
document的方法如下:(摘自javascript寶典-16章document對象和body元素對象)
attachEvent();
captureEvent();
clear();
clearAttributes();
close();
createAttribute();
createComment();
createDocumentFragment();
createElement();
createEvent();
createEventObject();
createRange();
createStyleSheet();
createTextNode();
createTreeWalker();
detachEvent();
elementFrommPoint();
execCommand();
focus();
getElementById();
getElementsByName();
getElementsByTagName();
getSelection();
handleEvent();
hasFocus();
mergeAttributes();
open();
queryCommandEnabled();
queryCommandIndterm();
queryCommandState();
queryCommandSupported();
queryCommandText();
queryCommandValue();
recalc();
releaseCapture();
releaseEvents();
routeEvent();
setActive();
write();
writeln();
『捌』 js數組常用方法
1.push方法將單個元素或者另外的數組添加到條用該方法的數組末尾去
2.concat方法就是將兩個數組或者元素之間連接起來調用該方法的數組放在前面,方法實參放在後面
3.pop方法刪除數組中的最後一個元素且會將這個被刪除的元素返回
4.splice 方法刪除或插入指定位置的元素函數的原型為splice(index,howmany,element1,.....,elementX...
5.reverse 方法即將數組的順序反轉
『玖』 JS數組去重的幾種常見方法
js 數組去重
1
註:應該也可以適用於 object數組,但是本人沒有進行驗證,貼出來僅供你參考
第一種是比較常規的方法思路:1.構建一個新的數組存放結果2.for循環中每次從原數組中取出一個元素,用這個元素循環與結果數組對比3.若結果數組中沒有該元素,則存到結果數組中代碼如下:
Array.prototype.unique1 = function(){ var res = [this[0]]; for(var i = 1; i < this.length; i++){ var repeat = false; for(var j = 0; j < res.length; j++){ if(this[i] == res[j]){ repeat = true; break; } } if(!repeat){ res.push(this[i]); } } return res;}var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]alert(arr.unique1());
第二種方法比上面的方法效率要高思路:1.先將原數組進行排序2.檢查原數組中的第i個元素 與 結果數組中的最後一個元素是否相同,因為已經排序,所以重復元素會在相鄰位置3.如果不相同,則將該元素存入結果數組中代碼如下:
Array.prototype.unique2 = function(){ this.sort(); //先排序 var res = [this[0]]; for(var i = 1; i < this.length; i++){ if(this[i] !== res[res.length - 1]){ res.push(this[i]); } } return res;}var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]alert(arr.unique2());
二種方法也會有一定的局限性,因為在去重前進行了排序,所以最後返回的去重結果也是排序後的。如果要求不改變數組的順序去重,那這種方法便不可取了。第三種方法(推薦使用)思路:1.創建一個新的數組存放結果2.創建一個空對象3.for循環時,每次取出一個元素與對象進行對比,如果這個元素不重復,則把它存放到結果數組中,同時把這個元素的內容作為對象的一個屬性,並賦值為1,存入到第2步建立的對象中。說明:至於如何對比,就是每次從原數組中取出一個元素,然後到對象中去訪問這個屬性,如果能訪問到值,則說明重復。代碼如下:
Array.prototype.unique3 = function(){ var res = []; var json = {}; for(var i = 0; i < this.length; i++){ if(!json[this[i]]){ res.push(this[i]); json[this[i]] = 1; } } return res;}var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];alert(arr.unique3());
『拾』 JS里聲明函數有幾種方式
JS函數的定義方式比較靈活,它不同於其他的語言,每個函數都是作為一個對象被維護和運行的。
先看幾種常用的定義方式:
function func1([參數]){
/*函數體*/
}
var func2=function([參數]){
/*函數體*/
};
var func3=function func4([參數]){
/*函數體*/
};
var func5=new Function();
上述第一種方式是最常用的方式,不用多說。
第二種是將一匿名函數賦給一個變數,調用方法:func2([函數]);
第三種是將func4賦給變數func3,調用方法:func3([函數]);或func4([函數]);
第四種是聲明func5為一個對象。
再看看它們的區別:
function func(){
//函數體
}
//等價於
var func=function(){
//函數體
}
但同樣是定義函數,在用法上有一定的區別。
<script>
//這樣是正確的
func(1);
function func(a)
{
alert(a);
}
</script>
<script>
//這樣是錯誤的,會提示func未定義,主要是在調用func之前沒有定義
func(1);
var func = function(a)
{
alert(a);
}
//這樣是正確的,在調用func之前有定義
var func = function(a)
{
alert(a);
}
func(1);
</script>
用同樣的方法可以去理解第三種定義方式。
第四種定義方式也是需要聲明對象後才可以引用。