JavaScript替换与其他数组相比的数组匹配成员

时间:2016-11-24 14:36:55

标签: javascript arrays

我接到了这个任务,我无法用字符串“BUSTED”替换匹配,你能帮我吗?我是JS的新手。很可能有一种更优雅的方式来做到这一点。任何帮助赞赏。

您将获得两个数组:一个包含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 );

3 个答案:

答案 0 :(得分:1)

使用Array.prototype.map()来迭代fCommunityMembers。如果在SuspectList返回BUSTED中找到成员,如果没有返回成员:

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);

答案 1 :(得分:0)

Judt使用这样的过滤器:

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

和forEach循环插入BUSTED而不是先前匹配的元素

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

答案 2 :(得分: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);