javascript - 在数组中查找完全唯一的名称

标签 javascript arrays

给定一个全名数组,其中每个名字的格式为“lastName, firstName”,我想找到完全唯一的名字,即给定下面的名字数组

const names = [
    'Smith, Joan',
    'Smith, John',
    'Smith, Sam',
    'Thomas, Joan',
    'Upton, Joan',
    'Upton, Tom',
    'Vasquez, Cesar'
  ]
- Smith, John     # Already saw a last name "Smith"
- Smith, Sam      # Already saw a last name "Smith"
- Thomas, Joan    # Already saw a first name "Joan"
- Upton, Joan     # Already saw a first name "Joan"
- Upton, Tom      # Already saw a last name "Upton"

I want to have as a result only

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

最佳答案

使用集合对象。它经过专门设计,因此每个值只能放入其中一个。它有方法 .has(value).add(value)

我还使用 for...of 循环来遍历列表。

演示:https://jsfiddle.net/6tq00maq/1/

 const names = [
  'Smith, Joan',
  'Smith, John',
  'Smith, Sam',
  'Thomas, Joan',
  'Upton, Joan',
  'Upton, Tom',
  'Vasquez, Cesar'
]

//set up lists for first and last names
var firstNameList = new Set();
var lastNameList = new Set();

//set place for unique names to be stored
var uniqueNames = [];

//iterate list
for (var name of names) {
  var firstName = name.split(", ")[1];
  var lastName = name.split(", ")[0];

  //check if first name or last name are already indexed
  if (!firstNameList.has(firstName) && !lastNameList.has(lastName)) {
  //if not, push them to the unique names to return
    uniqueNames.push(lastName + ", " + firstName);
  }
  //add to indexed names
  firstNameList.add(firstName);
  lastNameList.add(lastName);
}
console.log(uniqueNames);

关于javascript - 在数组中查找完全唯一的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41786272/

相关文章:

数组中的javascript数组

php - 通知 : Array to string conversion on PDO database connection

javascript - 按共同值(value)观分组

javascript - VueJS 在嵌套的 v-for 循环中动态添加表单组件?

javascript - 使用 Jquery 搜索元素的数据属性,部分匹配

javascript - 在 Jquery 中滑动页面

c++ - 比较两个 bigints c++

arrays - 如何使用 sorted 对元组数组进行排序? (无法使用类型参数列表调用 'sorted')

javascript - 使用 JS 在多边形上创建航路点

javascript - Kartik Yii2 Number - 从扩展中获取值(value)