2016-11-24 2 views
0

У меня есть эта задача, и я не могу получить, как заменить спички строкой «BUSTED», вы можете мне помочь. Я новичок в JS. Скорее всего, есть более элегантный способ сделать это. Любая помощь оценивается.JavaScript Замените соответствующие элементы массива по сравнению с другим массивом

Вы дали два массива: один, который содержит каждый член fCommunity и еще один , который содержит все возможные подозреваемый. Заменить каждый элемент fCommunity из списка подозреваемых со словом «лопнули»

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

мне удалось получить член соответсвующих, но как я могу заменить их в списке подозреваемого ?:

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() для itera te fCommunityMembers. Если член находится в SuspectList возвращении разорено, если не вернуть член:

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

Judt использовать фильтр следующим образом:

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

и цикл forEach для вставки BUSTED вместо предыдущего согласованного элемента s

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

Да способ более элегантный, чтобы выбрать член соответсвующие, спасибо. Как заменить эти общие члены строкой «BUSTED» в массиве CommunityMembers? – 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 Для замены значения по лопнул, выполните следующие действия:

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); 
Смежные вопросы