如何检测数组中的元素长一个字符,并且匹配另一个数组中任何元素的第一个字符

时间:2019-02-21 00:44:37

标签: javascript arrays string function ecmascript-6

因此,在这种情况下,我有一个名称数组,需要检测这些名称中是否有仅包含缩写的名称。

例如:乔恩,保罗,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
    }
}

我不确定该如何处理。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

简单-将somefilterstartsWith一起使用,像这样:

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