gpt4 book ai didi

javascript - 在 JavaScript 数组中查找唯一对象的最快方法

转载 作者:行者123 更新时间:2023-12-03 09:37:54 25 4
gpt4 key购买 nike

我有一个大约 15,000 个 javascript 对象的数组。每个对象都有两个字段:

{
name : "Foo",
address : "bar@moo.com"
}

我想创建一个新数组,仅存储唯一的电子邮件地址和相应的名称。到目前为止我有这个方法:

// temp1 is my array of 15,000 objects
var arr = [];

for (var i = 0; i<temp1.length; i++){
var count = 0;
if(!arr.length){arr.push(temp1[i])};
for(var x = 0; x<arr.length; x++){
if(temp1[i].address === arr[x].address){
count++;
if(temp1[i].name.length && !arr[x].name.length){arr[x] = temp1[i];} // Choose the new object if the old one has no name field
}

if((x === arr.length -1) && count === 0){
arr.push(temp1[i])
}
}
}

我在这里有一个额外的要求 - 如果arr中的对象有一个空白字符串作为其名称字段,并且temp1对象确实,我想存储 temp1 对象。

我当前的方法在 Chrome 中运行需要 30 秒,这并不理想。

编辑:为了澄清,我问Javascript中是否有更有效的方法来查找数组中的唯一对象。上面的一种方法是创建一个新数组,对原始数组进行迭代,并为每个数组循环遍历新数组中的所有内容以检查是否有重复项。我想知道什么会比这更有效。

最佳答案

还有另一种可能性

var tmp = {};

temp1.forEach(function(item) {
var key = item.address;
add = tmp[key] = tmp[key] || item;
add.name = add.name || item.name;
});
var addr = Object.keys(tmp).map(function(t) { return tmp[t] });

警告:ie9 或更高版本 - 或对较小的 ie 浏览器使用以下填充

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map对于 map

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach对于forEach

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys对于Object.keys

考虑@dev-null 的评论后

var tmp = {}, item, key, add, i, l = temp1.length, addr;
for(i = 0; i < l; i++) {
item = temp1[i];
key = item.address;
add = tmp[key] = tmp[key] || item;
add.name = add.name || item.name;
};
addr = new Array(Object.keys(tmp).length);
i = 0;
for(key in tmp) {
addr[i++] = tmp[key];
}

平均速度是我第一次测试的两倍(尽管是在 Firefox 中)

比 OP 的原始脚本快 64 倍

编辑:这是最快的(在 Firefox 中)

var tmp = {}, item, key, add, i, l = temp1.length, addr;
for(i = 0; i < l; i++) {
item = temp1[i];
key = item.address;
add = tmp[key] = tmp[key] || item;
add.name = add.name || item.name;
};
addr = Object.keys(tmp).map(function(t) { return tmp[t] });

关于javascript - 在 JavaScript 数组中查找唯一对象的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31270166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com