A. js中數組合並
描述
方法concat()將創建並返回一個新數組,這個數組是將所有參數都添加到array中生成的。它並不修改array。如果要進行concat()操作的參數是一個數組,那麼添加的是數組中的元素,而不是數組。
示例
var a = [1,2,3];
a.concat(4, 5) //返回 [1,2,3,4,5]
a.concat([4,5]); //返回 [1,2,3,4,5]
a.concat([4,5],[6,7]) //返回 [1,2,3,4,5,6,7]
a.concat(4, [5,[6,7]]) //返回 [1,2,3,4,5,[6,7]]
B. js中數組合並問題,用concat方法處理
既然你都確定了所有參數都是Array那就一路concat過去不就是了?
functionccat(){
varcon_arr=[];
for(vari=0,j=arguments.length;i<j;i++){
con_arr=con_arr.concat(arguments[i])
}
returncon_arr
}
a=[1,2,3]
b=[4,5,6]
c=ccat(a,b)
C. js兩個數組排列組合
<html>
<head>
<title>js兩個數組排列組合</title>
<scripttype="text/javascript">
vara=["A","B","C"];
varb=["1","2","3"];
window.onload=function(){
vara1=newobjPL(a);//計算數組a的排列組合
varb1=newobjPL(b);//計算數組b的排列組合
varstr="";
varn=0;
//a1和b1的排列組合個數就是兩者相乘(雙層循環)
for(vari=0;i<a1.length;i++){
for(varj=0;j<b1.length;j++){
str+=a1[i]+b1[j]+"";
n++;
}
str+="<br/>";
}
document.write("共"+n+"個<br/>");
document.write(str);
}
//取數組的排列組合
functionobjPL(arr){
this.a=arr;
this.r=[];
this.n=0;
//從M個數裡面取N個(遞歸)
this.mGetN=function(curIndex,num,curSelect){
if(num==0){
this.r[this.n++]=curSelect;return;
}
if(this.a.length-curIndex<num)return;
this.mGetN(curIndex+1,num-1,curSelect+this.a[curIndex]);
this.mGetN(curIndex+1,num,curSelect);
}
for(vari=1;i<=this.a.length;i++){
this.mGetN(0,i,"");
}
returnthis.r;
}
</script>
</head>
<body></body>
</html>
["A","B","C"]與["1","2","3"]組合的結果:
D. 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
總結:此方法不支持負值,只針對下標來截取的
最後,以上主要是總結的數組的一些簡單的操作方法,學無止境,繼續努力。
E. js如何處理兩個json數組去除重復數據,然後合並數組,求大神幫忙解決下
varc=a.concat(b),//合並成一個數組
temp={},//用於id判斷重復
result=[];//最後的新專數組
//遍歷c數組,將每個item.id在temp中是否存在值做屬判斷,如不存在則對應的item賦值給新數組,並將temp中item.id對應的key賦值,下次對相同值做判斷時便不會走此分支,達到判斷重復值的目的;
c.map((item,index)=>{
if(!temp[item.id]){
result.push(item);
temp[item.id]=true
}
})
console.log(result)