Javascript-将数组1中的子字符串与数组2中的字符串进行比较>;如果有多个实例,则放弃

Javascript-将数组1中的子字符串与数组2中的字符串进行比较>;如果有多个实例,则放弃,javascript,arrays,Javascript,Arrays,我有两个数组。一个数组包含如下句子: var sentences = [ "Bob goes to the zoo", "Jim goes to the airport", "Jenny and Bob go to the beach", "Jenny goes to the cafe" ] 另一个名字是这样的: var names = [ "Bob", "Jim", "Jenny" ] 我要做的是将其输出到一个新数组,但只输出那些从names数组中只有一个实例的字符串。(因此,在本例中,应

我有两个数组。一个数组包含如下句子:

var sentences = [
"Bob goes to the zoo",
"Jim goes to the airport",
"Jenny and Bob go to the beach",
"Jenny goes to the cafe"
]
另一个名字是这样的:

var names = [
"Bob",
"Jim",
"Jenny"
]
我要做的是将其输出到一个新数组,但只输出那些从names数组中只有一个实例的字符串。(因此,在本例中,应该省略“Jenny和Bob去海滩”字符串

示例输出:

var output = [
"Bob goes to the zoo",
"Jim goes to the airport",
"Jenny goes to the cafe"
]
我知道如果只存在一个实例,如何丢弃一个数组元素,但不确定如何检查多个实例,如此处所需://

使用方法

var语句=[
“鲍勃去动物园”,
“吉姆去机场”,
“珍妮和鲍勃去海滩”,
“珍妮去咖啡馆”
],
姓名=[
“鲍勃”,
“吉姆”,
“珍妮”
];
var res=句子.filter(函数(v){//遍历句子数组进行筛选
返回names.filter(函数(v1){//遍历names数组和filter
返回v.indexOf(v1)>-1;//获取语句中包含的元素
}).length==1;//根据筛选的名称数组长度进行筛选
});
console.log(res);
使用方法

var语句=[
“鲍勃去动物园”,
“吉姆去机场”,
“珍妮和鲍勃去海滩”,
“珍妮去咖啡馆”
],
姓名=[
“鲍勃”,
“吉姆”,
“珍妮”
];
var res=句子.filter(函数(v){//遍历句子数组进行筛选
返回names.filter(函数(v1){//遍历names数组和filter
返回v.indexOf(v1)>-1;//获取语句中包含的元素
}).length==1;//根据筛选的名称数组长度进行筛选
});

console.log(res);
可以使用过滤器、拆分和减少

var语句=[
“鲍勃去动物园”,
“吉姆去机场”,
“珍妮和鲍勃去海滩”,
“珍妮去咖啡馆”
];
变量名称=[
“鲍勃”,
“吉姆”,
“珍妮”
];
//把句子过滤掉
var输出=句子。过滤器(函数(句子){
//对于每个句子,找出每个名字出现的次数
返回句子。拆分(“”)。减少(函数(计数,单词){
if(names.indexOf(word)>=0){
计数+=1;
}
返回计数;
}, 0) === 1;
});

console.log(输出);
可以使用过滤器、拆分和减少

var语句=[
“鲍勃去动物园”,
“吉姆去机场”,
“珍妮和鲍勃去海滩”,
“珍妮去咖啡馆”
];
变量名称=[
“鲍勃”,
“吉姆”,
“珍妮”
];
//把句子过滤掉
var输出=句子。过滤器(函数(句子){
//对于每个句子,找出每个名字出现的次数
返回句子。拆分(“”)。减少(函数(计数,单词){
if(names.indexOf(word)>=0){
计数+=1;
}
返回计数;
}, 0) === 1;
});

console.log(输出);
您可以使用
进行
循环,
Array.prototype.join()
String.prototype.match()

var语句=[
“鲍勃去动物园”,
“鲍勃去绿野仙踪”,
“吉姆去机场”,
“吉姆去门廊”,
“珍妮和鲍勃去海滩”,
“珍妮去咖啡馆”
]
变量名称=[
“鲍勃”,
“吉姆”,
“珍妮”
];
对于(var i=0,s=句子。join(“\n”)+“\n”,res=[];
iconsole.log(res);
您可以使用
进行循环,
数组.prototype.join()
字符串.prototype.match()

var语句=[
“鲍勃去动物园”,
“鲍勃去绿野仙踪”,
“吉姆去机场”,
“吉姆去门廊”,
“珍妮和鲍勃去海滩”,
“珍妮去咖啡馆”
]
变量名称=[
“鲍勃”,
“吉姆”,
“珍妮”
];
对于(var i=0,s=句子。join(“\n”)+“\n”,res=[];
iconsole.log(res);
如果有一句话“
帕特里克向帕特里夏问好”
”,还有两个名字“
“帕特”,“帕特里夏”
”,那么这个答案就有一个潜在的问题。发生的情况是,
“帕特里夏向帕特里夏问好”
将被错误地排除。@kazenorin:简单的变体可以使其工作
v.split(/\s+/)indexOf(v1)
Wow!非常感谢您的帮助!!特别是对您的代码进行注释(我发现在处理跨数组的操作时有点棘手,所以您的注释肯定会帮助我理解和学习)。同样感谢您提供ES6示例,我正在逐渐尝试使用它:)@ameh:很高兴能帮助您:)如果有一句话“Patrick向Patricia问好”
,还有两个名字“
“Pat”,“Patricia”
”,那么这个答案可能有一个问题。发生的情况是,
“Patrick向Patricia问好”
将被错误地排除。@kazenorin:简单的变化可以使它工作
v.split(/\s+/)indexOf(v1)
哇!非常感谢!!特别是对代码进行注释(我发现在处理跨数组的操作时有点棘手,所以您的注释肯定有助于我理解和学习)。同样感谢您的ES6示例,我正逐渐尝试使用它:)@ameh:很高兴帮助您:)