簡體   English   中英

通過基於Javascript中第一個數組的元素進行分組來合並兩個數組

[英]Merge two arrays by grouping based on elements of 1st array in Javascript

我有兩個這樣的數組(arr1&arr2)

var arr1 = ["A","B","C"];

var arr2 = [["A","aa"], ["A","ab"], ["A","ac"],["B","ba"],["B","bb"],["B","bc"],["C","ca"],["C","cb"]];

我想根據第一個數組的值將它們組合到javascript中的第三個數組中。 所需輸出:

arr3 = [ ["A",["aa","ab","ac"]], ["B",["ba","bb","bc"] ], ["C",["ca","cb"]] ]

注意:我從arr2開始,並且能夠檢索第一個值並將重復項刪除到arr1中。

請指教。

這樣嘗試

var arr1 = ["A", "B", "C"];

var arr2 = [
  ["A", "aa"],
  ["A", "ab"],
  ["A", "ac"],
  ["B", "ba"],
  ["B", "bb"],
  ["B", "bc"],
  ["C", "ca"],
  ["C", "cb"]
];
var newVal = arr1.map(function(x) {
  var filter = arr2.filter(function(y) {
    return y[0] == x;
  }).map(function(y) {
    return y[1];
  });
  return [x, filter];
})
console.log(newVal);

DEMO

注意:我從arr2開始,並且能夠檢索第一個值並將重復項刪除到arr1中。

與其創建arr1作為中間步驟,不如創建一個對象作為中間步驟:

var obj = arr2.reduce(function(a,b){
  if (!a[b[0]]) a[b[0]] = [];
  a[b[0]].push(b[1]);
  return a;
},{});

// obj is now {"A":["aa","ab","ac"],"B":["ba","bb","bc"],"C":["ca","cb"]}

將該對象轉換為所需的輸出數組:

var arr3 = Object.keys(obj).map(function(v) { return [v, obj[v]]; });
// [["A",["aa","ab","ac"]],["B",["ba","bb","bc"]],["C",["ca","cb"]]]

如果您實際上還需要arr1數組用於其他操作,則:

var arr1 = Object.keys(obj);
// ["A", "B", "C"]

但是請注意, obj對於進一步處理非常有用,因為如果您需要獲取與"B"關聯的值,則無需再次搜索數組,您只需說出obj["B"] (這將給出數組["ba","bb","bc"] )。 因此,第二個"B"值是obj["B"][1]

進一步閱讀:

暫無
暫無

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

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