当从现有 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/