2015-12-02 52 views
0

如何可以簡化陣列組織/組基於條件的陣列 - 的JavaScript

[ china, country1(city1), country1(city2), country1(city3)), korea, australia]

[ china, country1(city1, city2, city3), korea, australia] 
+0

變化'country1'接受多個參數?當然,這也會改變數組中元素的數量。 –

+0

country1中的元素數量可能不同。如何更改country1以接受參數?我認爲這只是一個數組元素。 – Mustang

+0

'country1'似乎是一個函數。情況並非如此嗎?你的問題根本不清楚。請相應閱讀[問]並[編輯]你的問題。 –

回答

0

迭代通過數組元素

  1. 提取國家和城市分別
  2. 更新國家城市地圖(您的對象可以跟蹤映射到哪個城市的國家)
  3. 通過此對象的鍵,並與您的國家城市創建一個新的陣列。如果該國家有城市陣列,請使用join(',')獲取逗號分隔的城市字符串。

var cityRegex = /\((.*)\)/; 
 
var countryRegex = /([^()]*)\(?.*\)?/; 
 

 
var countryCityArray = ['china', 'country1(city1)', 'country1(city2)', 'country1(city3)', 'korea', 'australia']; 
 

 
var countryCityMap = {}; 
 

 
countryCityArray.forEach(function(countryCity) { 
 
    var matches = countryRegex.exec(countryCity); 
 
    var country = matches[1] 
 
    if (!countryCityMap[country]) { 
 
    countryCityMap[country] = []; 
 
    } 
 

 
    matches = cityRegex.exec(countryCity); 
 

 
    if (matches && matches.length) { 
 
    var city = matches[1]; 
 
    countryCityMap[country].push(city); 
 
    } 
 

 
}); 
 

 
var targetArray = Object.keys(countryCityMap).map(function(country) { 
 
    var countryCity = country; 
 
    if (countryCityMap[country].length) { 
 
    countryCity = countryCity + '(' + countryCityMap[country].join(',') + ')'; 
 
    } 
 
    return countryCity; 
 
}); 
 

 
console.log(targetArray);

+0

我試過了。如果數組元素具有其他特殊字符,解決方案不起作用:var array = ['abc','xyz(test2)','x&z(test3)','x&z(test4)','pqr','kl -m']; – Mustang

+0

@SAM,正則表達式必須修改。看到我更新的答案 – AmmarCSE