我目前正在开发一个小型应用程序,我必须遍历大量的对象。什么是最有效的方法来执行此操作?
var array = [
{
id: "1",
name: "Alpha"
},
{
id: "2",
name: "Beta"
},
...
];
我想让每个对象name
等于"Alpha"
。我目前正在使用一个简单的if
语句来过滤具有不同name
值的对象,但我想知道是否有更高效的方法来执行此操作,性能方面。
值得一提的是,我会将匹配结果推送到新数组中。
答案 0 :(得分:1)
不,没有更有效的方式。
另一种方法是构建和维护某种内部数据结构,使您能够更快地找到所需的元素。像往常一样,权衡取决于维持这种结构所涉及的工作与保存你的时间之间的关系。
答案 1 :(得分:0)
我没有办法知道哪种方式更有效。
但是如果您按名称排序对象,则可以在到达名称不等于“Alpha”的对象时立即停止搜索。
要查找您要查找的第一个对象,您可以使用二进制搜索,然后从此对象上下移动,直到两端都到达一个未命名为“Alpha”或数组末尾的对象。 / p>
这只是一种优化方式,需要时间对数组进行排序,并且在添加元素时也需要更多时间。
答案 2 :(得分:0)
这种任务完全有一个JavaScript函数。 过滤强>
来自文档
filter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。
以下是一个代码示例,用于从数组中获取具有特定“名称”字段的所有元素:
const arr = [
{name: 'Abc'},
{name: 'Xyz'},
{name: 'Lmn'},
{name: 'Xyz'},
{name: 'Xyz'}
];
let response = findByName('Xyz');
console.log(response);
function findByName (name) {
return arr.filter((element) => {
return element.name = name;
});
}
答案 3 :(得分:0)
如果您需要多次使用具有给定名称的集合,则可以使用名称为哈希的对象并立即访问这些项目。
var array = [{ id: "1", name: "Alpha" }, { id: "2", name: "Beta" }, { id: "3", name: "Beta" }, { id: "4", name: "Gamma" }, { id: "5", name: "Beta" }, { id: "2", name: "Alpha" }],
hash = Object.create(null);
array.forEach(function (a) {
if (!hash[a.name]) {
hash[a.name] = [];
}
hash[a.name].push(a);
});
console.log(hash);

.as-console-wrapper { max-height: 100% !important; top: 0; }