gpt4 book ai didi

Javascript - 类似序列数组的对象

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

经常有一些任务,例如将商品添加到购物车中。如果购物车是一个数组,则通过 id 检索商品需要 O(n) 时间。使用对象的复杂度为 O(1),但不保证插入顺序。

那么有没有一种优雅的方法可以在保持插入顺序的同时快速查找对象?

最佳答案

我通常通过使用一个数组一个都引用同一对象的对象来完成此操作。例如:

var thingies = [];
var thingiesById = Object.create(null);

添加“东西”时:

thingies.push(thingy);
thingiesById[thingy.id] = thingy;

示例:

var thingies = [];
var thingiesById = Object.create(null);

function addThingy(thingy) {
thingies.push(thingy);
thingiesById[thingy.id] = thingy;
}

// Note intentionally not adding them in ID order
addThingy({id:3, name: "Thingy 3"});
addThingy({id:1, name: "Thingy 1"});
addThingy({id:2, name: "Thingy 2"});

thingies.forEach(function(thingy) {
console.log(thingy.id + ": " + thingy.name);
});

<小时/>

ES2015+ 的 Map 维护插入顺序并提供遵循该顺序的迭代语义。您需要测试 get 的查找速度是否符合您的需要。

示例:

const thingies = new Map();

function addThingy(thingy) {
thingies.set(thingy.id, thingy);
}

// Note intentionally not adding them in ID order
addThingy({id:3, name: "Thingy 3"});
addThingy({id:1, name: "Thingy 1"});
addThingy({id:2, name: "Thingy 2"});

for (const thingy of thingies.values()) {
console.log(thingy.id + ": " + thingy.name);
}

关于Javascript - 类似序列数组的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45761232/

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