Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将一个数组中的首字母转换为另一个数组中的全名是可行的,但当数组长度不同时则不行_Javascript_Arrays - Fatal编程技术网

Javascript 将一个数组中的首字母转换为另一个数组中的全名是可行的,但当数组长度不同时则不行

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

下面的函数通过比较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 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']。这不应该发生。弗雷德不是弗雷德里克的首字母,“苏”也不是“苏珊”的首字母。