Javascript 将一个数组中的首字母转换为另一个数组中的全名是可行的,但当数组长度不同时则不行
下面的函数通过比较array1和array2来创建数组,以查找1)array1中与数组2中的名称相对应的初始值并转换该首字母,或2)在array1中查找与array2中的首字母相对应的名称并转换该名称以匹配首字母Javascript 将一个数组中的首字母转换为另一个数组中的全名是可行的,但当数组长度不同时则不行,javascript,arrays,Javascript,Arrays,下面的函数通过比较array1和array2来创建数组,以查找1)array1中与数组2中的名称相对应的初始值并转换该首字母,或2)在array1中查找与array2中的首字母相对应的名称并转换该名称以匹配首字母 var array1 = ['fred', 's']; var array2 = ['sue', 'fred']; var modified = []; //create a new modified array that converts initials to names an
var array1 = ['fred', 's'];
var array2 = ['sue', 'fred'];
var modified = [];
//create a new modified array that converts initials to names and vice versa
array1.forEach(function(element) {
modified.push(array2.find((el) => el.startsWith(element[0])));
var index = array2.indexOf(array2.find((el) => el.startsWith(element[0])));
if (index > -1) {
array2.splice(index, 1);
}
});
console.log(modified); //['fred', 'sue']
这正是人们所期望的。即使没有首字母缩写,新数组也只会与预期的数组1匹配
var array1 = ['fred', 'sue'];
var array2 = ['sue', 'fred'];
console.log(modified); //['fred', 'sue']
如果array1比array2短,它将按预期工作:
var array1 = ['fred'];
var array2 = ['sue', 'fred'];
console.log(modified); // ['fred']
但是,当数组1比数组2长时,我没有得到预期的结果:
var array1 = ['fred', 'sue'];
var array2 = ['sue'];
console.log(modified); // ['undefined', 'sue'] // should be ['fred', 'sue']
如何修复此问题?您正在将
.find()
的结果推送到modified
上,即使它没有找到任何内容。您应该默认为正在搜索的字符串
不要调用两次.find()
,而是使用findIndex()
获取一次索引,并在推送和拼接时使用该索引
var array1=['fred','sue'];
var array2=['sue'];
修改=[];
数组1.forEach(函数(元素){
var指数=array2.findIndex(el=>el.StartWith(元素[0]);
如果(索引>-1){
修改的.push(array2[index]);
阵列2.拼接(索引1);
}否则{
修改。推(元素);
}
});
控制台日志(修改)
.find()
如果未找到匹配项,则返回未定义的
。您正在将其推到modified
。那么我的替代方案是什么呢?刚刚发现上面的问题:如果数组2=['frederick','susan'],modified will=['frederick','susan']。这不应该发生。弗雷德不是弗雷德里克的首字母,“苏”也不是“苏珊”的首字母。