javascript - 如何 - 提高代码性能以从数组中获取唯一值 - Javascript

标签 javascript performance

当从现有 5000 个用户数据的数组中获取唯一值时,我的代码速度性能非常慢。

下面是我的代码,它有两个条件:

一、获得独特的值(value)

其次,检查电话号码是否为空,优先考虑现有电话号码的用户数据。

var arr = [
  ["Wong", ""],
  ["Wong", "0143213123"],
  ["Ali", "0177213123"],
  ["Ali", "0177213123, 0124545345"],
  ["Ali", ""],
  ["Imran", "0133454335"]
];

function uniq(arr) {
  var seen = [];
  for (i = 0; i < arr.length; i++) {
    var a = arr[i][0];
    var a2 = arr[i][1];
    var c = true;
    for (x = 0; x < seen.length; x++) {
      var b = seen[x][0];
      var b2 = seen[x][1];
      if (b == a) {
        c = false;
        if ((b2.trim() == '' || b2.indexOf(',') == -1) && (a2.trim() != '')) {
          seen[x][1] = a2.trim();
          break;
        }
        break;
      }
    }
    if (c == true) {
      seen.push(arr[i]);
    }

  }
  return seen;
}

代码执行后的结果:

var arr = uniq(arr);
console.log(arr);

[
  ["Wong", "0143213123"],
  ["Ali", "0177213123, 0124545345"],
  ["Imran", "0133454335"]
];

在 jsfiddle here

最佳答案

您可以通过减少数据并将每个名称的数据存储在一个对象中来执行类似的操作。

var arr = [["Wong",""], ["Wong", "0143213123"], ["Ali", "0177213123"], ["Ali", "0177213123, 0124545345"], ["Ali", ""], ["Imran", "0133454335"]];

var uniq = arr.reduce((r, [name, number]) => {
  if(!r[name] || number.trim().length) r[name] = number;
  return r;
}, {});

console.log(Object.entries(uniq))

关于javascript - 如何 - 提高代码性能以从数组中获取唯一值 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51669300/

相关文章:

javascript - 如何检查数组是否只包含一个不同的元素?

javascript - window.onload 适用于 aspx 页面,但不适用于常规 html

javascript - HTML5 音频对象不能在 Safari 中播放

ruby-on-rails - 寻找更快的 ActiveRecord 查询 (Ruby on Rails)

android - ObservableOnSubscribe 回调中监听器的生命周期是什么 - Rxjava

java - 为什么 "new"关键字比赋值效率高这么多?

performance - 数据类型对 Spark/Scala 中的内存有多重要?

c# - ListView 调整列大小性能问题(分组)

javascript - 如何避免重复调用javascript函数

javascript - 使用 JQuery 缩放照片