簡體   English   中英

Javascript-如何從不同大小的兩個數組中連接字符串值?

[英]Javascript - How to concatenate string values from two arrays of different sizes?

我有兩個數組,例如:

數組1:

arr1 = ["Precon", "Contra", "Postco", "Cancel", "Consul"]

數組2:

arr2 = ["EJID", "EMBA", "EMPR", "GOBI", "PART", "PPOL", "SACI", "SOFL", "SOFM", "0000", "", "0002", "0003", "0004", "0005", "0006", "0007", "0008", "0009", "0010", "0011", "0012", "0013", "0014", "0015", "0016", "011", "0110", "9999"]

我想從上面的兩個中生成一個新數組,對於array1中的每個項目,將各個項目遞歸連接到新項目中,以獲得最終的數組,如下所示:

final = ['Precon-EJID', 'Contra-EJID', 'Postco-EJID', 'Cancel-EJID', 'Consul-EJID', 'Precon-EMBA', 'Contra-EMBA', 'Postco-EMBA', 'Cancel-EMBA', 'Consul-EMBA', 'Precon-EMPR', 'Contra-EMPR', 'Postco-EMPR', 'Cancel-EMPR', 'Consul-EMPR'...etc]

先感謝您

您可以使用2個簡單的for of循環來做到這一點:

 var arr1 = ["Precon", "Contra", "Postco", "Cancel", "Consul"]; var arr2 = ["EJID", "EMBA", "EMPR", "GOBI", "PART", "PPOL", "SACI", "SOFL", "SOFM", "0000", "", "0002", "0003", "0004", "0005", "0006", "0007", "0008", "0009", "0010", "0011", "0012", "0013", "0014", "0015", "0016", "011", "0110", "9999"] var finalArr = []; for ( var item2 of arr2 ) { for ( var item1 of arr1 ) { finalArr.push(`${item1}-${item2}`); } } console.log(finalArr); 

您可以使用嵌套的Array#map調用,並使用Array#concat展平結果:

 const arr1 = ["Precon", "Contra", "Postco", "Cancel", "Consul"] const arr2 = ["EJID", "EMBA", "EMPR", "GOBI", "PART", "PPOL", "SACI", "SOFL", "SOFM", "0000", "", "0002", "0003", "0004", "0005", "0006", "0007", "0008", "0009", "0010", "0011", "0012", "0013", "0014", "0015", "0016", "011", "0110", "9999"] const result = [].concat(...arr2.map((s1) => arr1.map((s2) => `${s2}-${s1}`))) console.log(result) 

這是一個班輪:

 arr1 = ["Precon", "Contra", "Postco", "Cancel", "Consul"] arr2 = ["EJID", "EMBA", "EMPR", "GOBI", "PART", "PPOL", "SACI", "SOFL", "SOFM", "0000", "", "0002", "0003", "0004", "0005", "0006", "0007", "0008", "0009", "0010", "0011", "0012", "0013", "0014", "0015", "0016", "011", "0110", "9999"] const result = [].concat(...arr1.map(prefix => arr2.map(suffix => prefix+suffix))); console.log(result) // EDIT: if order matters, reverse the use of arr1 and arr2: const orderedResult = [].concat(...arr2.map(suffix => arr1.map(prefix => prefix+suffix))); console.log(orderedResult) 

 const prefixes = [ "Precon", "Contra", "Postco", "Cancel", "Consul" ]; const suffixes = [ "EJID", "EMBA", "EMPR", "GOBI", "PART", "PPOL", "SACI", "SOFL", "SOFM", "0000", "", "0002", "0003", "0004", "0005", "0006", "0007", "0008", "0009", "0010", "0011", "0012", "0013", "0014", "0015", "0016", "011", "0110", "9999" ]; const results = suffixes .map(suffix => prefixes.map(prefix => prefix + '-' + suffix)) .reduce((xs, ys) => [...xs, ...ys]); console.log(results); 

另一種選擇是使用reduce ...

 let arr1 = ["Precon", "Contra", "Postco", "Cancel", "Consul"] let arr2 = ["EJID", "EMBA", "EMPR", "GOBI", "PART", "PPOL", "SACI", "SOFL", "SOFM", "0000", "", "0002", "0003", "0004", "0005", "0006", "0007", "0008", "0009", "0010", "0011", "0012", "0013", "0014", "0015", "0016", "011", "0110", "9999"] let arr3 = arr2.reduce((arr, val) => { let f = [] arr1.forEach(itm => val && f.push(itm + '-' + val)) return arr.concat(f) }, []) console.log(arr3) 

這是一個遞歸的。 就像OP問的那樣。 花了我一段時間。 :P

 arr1 = ["Precon", "Contra", "Postco", "Cancel", "Consul"] arr2 = ["EJID", "EMBA", "EMPR", "GOBI", "PART", "PPOL", "SACI", "SOFL", "SOFM", "0000", "", "0002", "0003", "0004", "0005", "0006", "0007", "0008", "0009", "0010", "0011", "0012", "0013", "0014", "0015", "0016", "011", "0110", "9999"] var arr = []; console.log(concat(arr1, arr2, 0, 0, 0)); function concat(arr1, arr2, arrIndex, index1, index2) { //console.log(arr1.length); if (index2 === (arr2.length)) { return; } else { arr[arrIndex] = arr1[index1] + '-' + arr2[index2]; if (index1 !== (arr1.length - 1)) { index1++; } else if (index1 === (arr1.length - 1)) { index1 = 0; index2++; //concat(arr1, arr2, ++arrIndex, index1, index2++); // Not here dummy :P } concat(arr1, arr2, ++arrIndex, index1, index2++); } return arr; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM