2016-11-20 80 views
1

我試圖從這個數組中獲取唯一的URL。JavaScript - 如何從基於唯一#的數組中獲取唯一的url?

var urls = [ 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-791-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-791-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-246-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-246-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-796-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-796-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-051-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-051-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-056-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-056-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
] 

從代碼,第五陣列['791','246','796','051', '056'],所以輸出是這樣的:

[ 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-791-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-246-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-796-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-051-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-056-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
] 

從另一個答案,我能搶就在數組中的唯一第五碼:

var unique = ['791','246','796', '051','056'] 

然後我試圖做到這一點,以抓取唯一的URL並將其推送到一個空的數組,但它不工作。

var uniqueUrls = [] 
for(i=0; i < unique.length; i++){ 
    for(j=0; j< urls.length; j++){ 
    if(urls[j].indexOf(unique[i])){ 
     uniqueUrls.push(urls[j]); 
     break; 
    } 
    } 
} 

任何人都可以幫助我嗎?我在for循環中做錯了什麼?或者是否有更好的方法來從URL數組中抓取唯一的URL而不使用double for循環?

更新

忘記提到其他位代碼並不總是「零」,也可以是任意的隨機數,但我仍然有興趣在抓住以第五代碼唯一的網址。

+0

1.'.indexOf(unique [i])'應該是'> -1'。 2)爲什麼'打破'? –

+0

@mparnisari我添加了中斷,所以一旦找到它,它會轉到下一個「唯一」值。也許有更好的辦法。 – medev21

回答

1

您可以使用ES6 Set與陣列蔓延得到獨特的價值觀:

const getUnique = (urls) => [...new Set(urls.map((url) => url.match(/\/banner\?l_id=(?:\w+-){4}(\w+)/)[1]))]; 
 

 
var urls = [ 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-791-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-791-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-246-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-246-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-796-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-796-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-051-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-051-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-056-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-056-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
]; 
 
    
 
console.log(getUnique(urls));

如果您不能使用ES6,請使用哈希對象減少檢查的獨特性:

function getUnique(urls) { 
 
    var hash = {}; 
 
    
 
    return urls.reduce(function(arr, url) { 
 
    var id = url.match(/\/banner\?l_id=(?:\w+-){4}(\w+)/)[1]; 
 
    
 
    if(!hash[id]) { 
 
     arr.push(id); 
 
     
 
     hash[id] = true; 
 
    } 
 
    
 
    return arr; 
 
    }, []); 
 
} 
 

 
var urls = [ 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-791-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-791-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-246-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-246-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-796-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-796-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-051-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-051-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-056-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
    "http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-056-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
 
]; 
 
    
 
console.log(getUnique(urls));

+0

這太棒了!我喜歡你使用正則表達式,但我忘了提及其他代碼並不總是'零',他們可以是任何隨機數。雖然我仍然對獨特的第五代碼感興趣。我怎麼才能修改基於我剛剛提到的正則表達式?不熟悉正則表達式,仍然在學習。 – medev21

+0

結構總是一樣嗎?除了數字之外,什麼會改變? –

+0

'banner?l_id ='保持不變,也在'&k'之後。在本節「A000-0000-0000000-000000-791」中,有5組數字。我從一份報告中得到這一點,我注意到前四個可以是任意的隨機數,但是第五個可以重複,然後它變成一個不同的#並且它重複;這就是爲什麼我對第五個代碼感興趣。 – medev21

0
var urls = [ 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-791-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-791-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-246-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-246-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-796-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-796-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-051-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-051-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-056-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk", 
"http://display.companyX.com/rest/banner?l_id=A000-0000-0000000-000000-056-0-0-0&k=A77K_fakfhaskfhkjshfkjo=kafkjafk" 
]; 

function onlyUnique(value, index, self) { 
    return self.indexOf(value) === index; 
} 

var unique = urls.filter(onlyUnique);