[英]Split nested array into multiple arrays
我有一個看起來像這樣的字符串:
str = {1|2|3|4|5}{a|b|c|d|e}
我想將其拆分為多個數組。 一個包含每個{}中所有第一個元素,一個包含第二個元素,依此類推:
arr_0 = [1,a]
arr_1 = [2,b]
arr_2 = [3,c]
.....
我能想到的最好的是:
var str_array = str.split(/}{/);
for(var i = 0; i < str_array.length; i++){
var str_row = str_array[i];
var str_row_array = str_row.split('|');
arr_0.push(str_row_array[0]);
arr_1.push(str_row_array[1]);
arr_2.push(str_row_array[2]);
arr_3.push(str_row_array[3]);
arr_4.push(str_row_array[4]);
}
有沒有更好的方法可以做到這一點?
請嘗試以下操作:
var zip = function(xs, ys) {
var out = []
for (var i = 0; i < xs.length; i++) {
out[i] = [xs[i], ys[i]]
}
return out
}
var res = str
.split(/\{|\}/) // ['', '1|2|3|4|5', '', 'a|b|c|d|e', '']
.filter(Boolean) // ['1|2|3|4|5', 'a|b|c|d|e']
.map(function(x){return x.split('|')}) // [['1','2','3','4','5'], ['a','b','c','d','e']]
.reduce(zip)
/*^
[['1','a'],
['2','b'],
['3','c'],
['4','d'],
['5','e']]
*/
var str = '{1|2|3|4|5}{a|b|c|d|e}'.match(/[^{}]+/g).map(function(a) {
return a.match(/[^|]+/g);
}),
i,
result = {};
for (i = 0; i < str[0].length; i += 1) {
result["arr_" + i] = [+str[0][i], str[1][i]];
}
第一部分,取弦,並將其分成兩半。 在|
之后將其拆分后,地圖將返回一個數組|
。 因此, str
等於:
[
[1,2,3,4,5],
['a', 'b', 'c', 'd', 'e']
]
for循環將迭代[1,2,3,4,5]
數組,並使數組具有適當的值。 數組存儲在一個對象中。 我們正在使用的對象稱為result
。 如果您不希望將其保留在result
,請閱讀Other
因為你不能從另一個變量作變量名,隨意更改result
到window
或甚至this
(我不知道這是否會工作)您也可以讓這樣的數組
var str = '{1|2|3|4|5}{a|b|c|d|e}'.match(/[^{}]+/g).map(function(a) { return a.match(/[^|]+/g); }),
result = [];
for (var i = 0; i < str[0].length; i += 1) {
result[i] = [+str[0][i], str[1][i]];
}
這非常相似,除了會像其他答案一樣生成包含數組的Array
,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.