Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.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
如何提高我的代码性能以从array-Javascript中获得唯一的值_Javascript_Performance - Fatal编程技术网

如何提高我的代码性能以从array-Javascript中获得唯一的值

如何提高我的代码性能以从array-Javascript中获得唯一的值,javascript,performance,Javascript,Performance,我的代码在从现有5000个用户数据的数组中获取唯一值时速度非常慢。 下面是我的代码,它有两个条件: 首先,要获得唯一值 其次,要检查电话号码是否为空,请优先选择现有电话号码的用户数据 var arr = [ ["Wong", ""], ["Wong", "0143213123"], ["Ali", "0177213123"], ["Ali", "0177213123, 0124545345"], ["Ali", ""], ["Imran", "0133454335

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

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

首先,要获得唯一值

其次,要检查电话号码是否为空,请优先选择现有电话号码的用户数据

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

在JSFIDLE中

您可以使用reduce执行类似操作,并将每个名称的数据存储在一个对象中

var arr=[“黄”,“黄”,“014312312”,“阿里”,“0177213123”,“阿里”,“0177213123”,“0124545345”,“阿里”,“伊姆兰”,“013344335”],[“阿里”,“伊姆兰”,“013344335”];
var uniq=arr.reduce((r,[名称,编号])=>{
如果(!r[name]| | number.trim().length)r[name]=编号;
返回r;
}, {});

console.log(Object.entries(uniq))
您可以使用reduce执行类似操作,并将每个名称的数据存储在一个对象中

var arr=[“黄”,“黄”,“014312312”,“阿里”,“0177213123”,“阿里”,“0177213123”,“0124545345”,“阿里”,“伊姆兰”,“013344335”],[“阿里”,“伊姆兰”,“013344335”];
var uniq=arr.reduce((r,[名称,编号])=>{
如果(!r[name]| | number.trim().length)r[name]=编号;
返回r;
}, {});

console.log(Object.entries(uniq))
谢谢@Nenad Vracar,我稍后会测试和反馈(y)谢谢@Nenad Vracar,我稍后会测试和反馈(y)
var arr = uniq(arr);
console.log(arr);

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