【发布时间】:2017-01-22 01:03:17
【问题描述】:
给定一个全名数组,其中每个名称的格式为“姓氏,名字”,我想找到完全唯一的名称,即给定下面的名称数组
const names = [
'Smith, Joan',
'Smith, John',
'Smith, Sam',
'Thomas, Joan',
'Upton, Joan',
'Upton, Tom',
'Vasquez, Cesar'
]
- Smith, John # 已经看到姓氏“Smith”
- Smith, Sam # 已经看到姓氏“Smith”
- Thomas, Joan # 已经看到名字“Joan”
- Upton, Joan # 已经看到名字“Joan”
- Upton, Tom # 已经看到姓氏“Upton”
我只想拥有一个结果
Smith, Joan
Vasquez, Cesar
这是我目前拥有的功能。但是,我想重写它以避免嵌套的 for 循环并提高性能。
function findUnique() {
const names = [
'Smith, Joan',
'Smith, John',
'Smith, Sam',
'Thomas, Joan',
'Upton, Joan',
'Upton, Tom',
'Vasquez, Cesar'
];
let result = names;
for (var i = 0; i < names.length; i++) {
for (var j = 1; j < names.length; j++) {
let names1 = names[i].split(', ');
let names2 = names[j].split(', ');
if (names1[0] == names2[0] || names1[0] == names2[1] || names1[1] == names2[0] || names1[1] == names2[1]) {
result.splice(i, 1);
}
}
}
return result;
}
【问题讨论】:
-
根据您的描述和代码,
Smith, Joan不是唯一的,但是您说这是预期的结果,我很困惑。另外,for循环中的splice会改变索引。 -
我已经添加了对什么被认为是“独特”的解释。基本上,如果名字或姓氏在名字中已经存在,则应该被拒绝
-
“George, Washington”和“Ian George”被认为是独特的还是不同的?
-
那么正确的结果会根据名称的顺序而变化吗? (如果
"Smith, Sam"是数组中的第一个名字,它将在结果中而不是"Smith, Joan")
标签: javascript arrays