Javascript 如何优化嵌套“for”到函数式编程
我创建了一个函数来检查列表中是否有重复的手机号码。问题是,我是通过使用nested for来实现的。如何使用函数式编程优化此代码 checkDuplicate:布尔值{ 对于let i=0;iJavascript 如何优化嵌套“for”到函数式编程,javascript,angular,typescript,Javascript,Angular,Typescript,我创建了一个函数来检查列表中是否有重复的手机号码。问题是,我是通过使用nested for来实现的。如何使用函数式编程优化此代码 checkDuplicate:布尔值{ 对于let i=0;i{ 让计数={}; 电话中的福莱特电话{ ifcounts[phone.number]返回true; 计数[电话号码]=1; } 返回false; } ifcheckDuplicatethis.phoneList{ 此.toastrService.error'Phone已在列表中!'; } 您可以使用Ar
let a = [1,2,1,3,3,5]
let x = [...new Set(a)]
// => [1, 2, 3, 5]
甚至比我在评论使用集中建议的过滤器更好——有几种方法可以做到这一点,但这是非常干净的。然而,过滤器可能会被认为更具“功能”,因为它是一个特殊的过滤器
let a = [1,2,1,3,3,5]
let x = [...new Set(a)]
// => [1, 2, 3, 5]
你可以这样做:
let dups = this.phoneList.filter(item =>
this.phoneList.filter(item2 => item.number == item2.number).length > 1
);
if (dups.length) {
this.toastrService.error('Phone already in List!');
return true;
}
…尽管它在可读性方面有点困难。您可以执行以下操作:
let dups = this.phoneList.filter(item =>
this.phoneList.filter(item2 => item.number == item2.number).length > 1
);
if (dups.length) {
this.toastrService.error('Phone already in List!');
return true;
}
…尽管它的可读性有点差。关于解决方案
这不是功能性的,但它是迄今为止最快的
const checkDuplicate=电话=>{
让计数={};
电话中的福莱特电话{
ifcounts[phone.number]返回true;
计数[电话号码]=1;
}
返回false;
}
ifcheckDuplicatethis.phoneList{
此.toastrService.error'Phone已在列表中!';
}论解决
这不是功能性的,但它是迄今为止最快的
const checkDuplicate=电话=>{
让计数={};
电话中的福莱特电话{
ifcounts[phone.number]返回true;
计数[电话号码]=1;
}
返回false;
}
ifcheckDuplicatethis.phoneList{
此.toastrService.error'Phone已在列表中!';
} 您可以使用Array.some检查电话号码是否重复,如下所示。在循环回调中,电话号码是添加到exists对象的布尔值的键。回调函数返回true时,循环立即停止,当在exists中找到与循环项对应的键/值时,就会发生这种情况
有关演示,请参阅。您可以使用Array.some检查电话号码是否重复,如下所示。在循环回调中,电话号码是添加到exists对象的布尔值的键。回调函数返回true时,循环立即停止,当在exists中找到与循环项对应的键/值时,就会发生这种情况
请参阅以获取演示。您可以制作一个仅包含唯一数字的集合,并将集合的长度与原始阵列的长度进行比较
hasDuplicates(): boolean {
return new Set(this.phoneList.map(p => p.number)).size < this.phoneList.length
}
您可以创建一个仅包含唯一数字的集合,并将集合的长度与原始数组的长度进行比较
hasDuplicates(): boolean {
return new Set(this.phoneList.map(p => p.number)).size < this.phoneList.length
}
这并不是关于角度,而是关于JavaScript。您可以尽可能快地缩短列表上的循环 由于我们已经检查了这些内部循环,因此每个内部循环的执行/检查速度都快了n-i 变量xObj={ 电话列表:[{ 姓名:弗雷迪, 电话:555121234 }, { 姓名:吉米, 电话:555121234 }, { 名字:妈妈, 电话:555121233 }, { 姓名:汤米, 电话:555121244 }, { 姓名:卢卡, 电话:555121222 }, { 姓名:彭妮, 电话:555121255 }, { 姓名:萨米, 电话:555121266 }, { 姓名:比尔,, 电话:555121244 } ], 电话列表2:[{ 姓名:弗雷迪, 电话:555121234 }, { 姓名:吉米, 电话:555121235 }, { 名字:妈妈, 电话:555121233 }, { 姓名:汤米, 电话:555121244 }, { 姓名:卢卡, 电话:555121222 }, { 姓名:彭妮, 电话:555121259 }, { 姓名:萨米, 电话:555121266 }, { 姓名:比尔,, 电话:555121247 } ], toastrService:{ 错误:functionmessage{ console.logmessage; } }, 检查重复:函数{ 设hasDupe=false 对于let i=0;i