因此,在这种情况下,我有一个名称数组,需要检测这些名称中是否有仅包含缩写的名称。
例如:乔恩,保罗,G,史密斯,B,摩根
我需要检测其中哪些元素是首字母(一个字符长),然后将它们与另一组名称进行比较。
例如:Morgan,Paul,George,Jon,Smith
如果这些缩写中的任何一个与第二个数组中任何名称的首字母匹配,我都需要返回true值。
var myStringArray = ["Jon", "Paul", "G", "Smith", "B", "Morgan"];
var myStringArray2 = ["Morgan", "Paul", "George", "Jon", "Smith"];
var arrayLength = myStringArray.length;
for (var i = 0; i < arrayLength; i++) {
if (myStringArray[i].length == 1) {
//Compare myStringArray[i] to every value of myStringArray2
}
}
我不确定该如何处理。有什么建议吗?
答案 0 :(得分:2)
简单-将some
与filter
和startsWith
一起使用,像这样:
const namesAndInitials = ["Jon", "Paul", "G", "Smith", "B", "Morgan"];
const names = ["Morgan", "Paul", "George", "Jon", "Smith"];
const initials = namesAndInitials.filter(e => e.length == 1);
const firstLetter = initials.some(initial => names.find(name => name.startsWith(initial)));
console.log(firstLetter); //Should return true because G for George
答案 1 :(得分:1)
检查每个名称的长度以及它们是否等于0,然后使用findIndex
检查第二个数组中的任何名称是否匹配:
var myStringArray = ["Jon", "Paul", "G", "Smith", "B", "Morgan"];
var myStringArray2 = ["Morgan", "Paul", "George", "Jon", "Smith"];
function findName(arr1, arr2) {
for (let initial of arr1) {
if (initial.length === 1) {
return arr2.findIndex(name => name[0] === initial) != -1
}
}
}
console.log(findName(myStringArray, myStringArray2))
答案 2 :(得分:0)
您可以循环遍历每个数组,然后进行比较,如下所示。
var arrWithInitials = ["Jon", "Paul", "G", "Smith", "B", "Morgan"];
var arrWithoutInitials = ["Morgan", "Paul", "George", "Jon", "Smith"];
var arr = [];
arrWithInitials.forEach(e => {
if (e.length == 1) {
arr.push(e);
}
});
arr.forEach(e => {
arrWithoutInitials.forEach(element => {
if (e == element[0]) {
console.log(true);
}
});
});