2016-11-24 33 views
0

私はこのタスクを手に入れましたが、文字列「BUSTED」と一致するものを置き換える方法がわかりません。私はJSの新人です。おそらくこれを行うよりエレガントな方法があります。どんな助けもありがたい。JavaScript他の配列と比較して配列の一致するメンバーを置換する

fCommunityのすべてのメンバーを保持する配列と、可能性のあるすべての容疑者を保持する配列を持つ の2つの配列が与えられます。

var fCommunityMembers = ['A','B','C']; 
var SuspectList = ['F','X','B','Z','Y','C','ZS','D','K','M','N']; 

は私が一致するメンバーを取得するために管理し、「逮捕」という言葉で容疑者リストからすべてのfCommunityメンバーを交換しますが、どのように私は、容疑者リスト?:

Array.prototype.diff = function(SuspectList) { 
    var ret = []; 
    this.sort(); 
    SuspectList.sort(); 
    for(var i = 0; i < this.length; i += 1) { 
     if(SuspectList.indexOf(this[i]) > -1){ 
      ret.push(this[i]); 
     } 
    } 
    return ret; 
}; 

var ListOfMatches = Array.from(fCommunityMembers.diff(SuspectList)); 

console.log(ListOfMatches); 

答えて

1

使用Array.prototype.map()を繰り返してfCommunityMembersを繰り返します。一致するメンバーを選ぶために、よりエレガント

var fCommunityMembers = ['A','B','C']; 
 
var SuspectList = ['F','X','B','Z','Y','C','ZS','D','K','M','N']; 
 

 
var result = fCommunityMembers.map(function(member) { 
 
    return SuspectList.indexOf(member) !== -1 ? 'BUSTED' : member; 
 
}); 
 

 
console.log(result);

0

でそれらを交換しますJuditは次のようなフィルタを使用します:

var ListOfMatches = SuspectList.filter(x => fCommunityMembers.indexOf(x) !== -1); 

と前回一致した要素の代わりにBUSTEDを挿入するforEachループあなたが必要なもの

fCommunityMembers.forEach((x,i,arr) => { 
    if (SuspectList.indexOf(x) !== -1) 
    arr[i] = "BUSTED"; 
}); 
+0

はい方法、感謝:メンバーを返さない場合メンバーは、SuspectListリターンBUSTEDに発見された場合。これらの共通メンバーをCommunityMembers配列の "BUSTED"という文字列に置き換えるにはどうすればよいですか? – KathyBlue

+1

@KathyBlue:ちょうど今までに答えました –

0

は、あなたのケースで逮捕して値を置き換えるために

var fCommunityMembers = [ 
    'A', 
    'B', 
    'C', 
    'D', 
    'F' 
]; 
var SuspectList = [ 
    'F', 
    'X', 
    'B', 
    'Z', 
    'Y', 
    'C', 
    'ZS', 
    'D', 
    'L' 
]; 
var suspects= fCommunityMembers.filter(function(el){ 
    return SuspectList.indexOf(el)>-1; 
}); 

編集#1 を助けることができる2つのアレイ

フィルタとの交点を行うことができます機能しますです以下:

var suspectsFnc = function (fc, sus) { 
    var busted = fCommunityMembers.filter(function (el) { 
     return SuspectList.indexOf(el) > -1; 
    }); 

    for (var i = 0; i < fc.length; i++) { 
     if (busted.indexOf(fc[i]) > -1) { 
      fc[i] = "Busted"; 
     } 
    } 
    return fc; 

} 

var suspects = suspectsFnc(fCommunityMembers, SuspectList); 
関連する問題