2016-11-20 4 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ループで何か間違っているのですか?または、二重forループを使用せずにURL配列から一意のURLを取得するより良い方法はありますか?

は、他の桁のコードを言及するのを忘れた

更新は常に「ゼロ」ではありません、彼らは任意の乱数ことができるが、私は第五のコードに基づいて、まだ独自のURLをつかむに興味があります。

+0

1. '.indexOf(unique [i])'は '> -1'でなければなりません。 2)なぜ「休憩」? –

+0

@mparnisariブレークを追加した後、それが見つかると、次の 'unique'値に行きます。おそらくもっと良い方法があります。 – 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

これは素晴らしいことです!私はあなたが正規表現を使用するのが好きですが、私は他のコードは常に 'ゼロ'ではないことを言及することを忘れていました、彼らは任意の乱数にすることができます。私はまだユニークな5番目のコードを持つURLに興味があります。私はちょうど言及したことに基づいて正規表現を変更することができますか?正規表現に精通していなくても、まだ学びます。 – medev21

+0

構造は常に同じですか?数字以外は何が変わるのですか? –

+0

の前に 'banner?l_id ='は、 '&k'の後にも同じままです。このセクションの 'A000-0000-0000000-000000-791'にちょうど5桁の数字があります。私はレポートからこれを得て、私は最初の4つが任意の乱数になることができることに気付きましたが、5番目のものが繰り返されると、別の#に変わり、再び繰り返されます。私は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); 
関連する問題