簡體   English   中英

將嵌套數組拆分為多個數組

[英]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

其他

因為你不能從另一個變量作變量名,隨意更改resultwindow或甚至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.

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