2016-11-20 39 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); 
相关问题