我刚刚开始使用JavaScript对象。我正在尝试按ID和位置存储目录库存。我认为单个对象看起来像这样:
var item = {
id: number,
locations: ["location1", "location2"]
};
我已经开始阅读有关它的内容,但我仍然试图绕过它。不确定将新项目添加到包含位置的列表的最快方法是什么,在现有项目中添加新位置,同时检查dupes。稍后获取位置的表现并不重要。这是运行数千次检查以最终按ID和位置获取项目的流程的一部分,因此性能至关重要。
最后一个问题,我甚至不确定是否可以将其存储在本地存储中。从另一个类似的问题来看,我不确定。
答案 0 :(得分:1)
使用lodash,这样的内容应该可以确定项目ID是否存在,并将新项目附加到数组中,或者只添加新位置:
var item = [{
id: 1,
locations: ["location1", "location2"]
},{
id: 2,
locations: ["location2", "location4"]
}];
function findItem(id){
return _.findIndex(item, function(chr) {
return chr.id == id;
});
}
function addItem(id,locations) {
var position = findItem(id);
if (position<0) {
item.push({
id: id,
locations: locations
})
} else {
item[position].locations = _.uniq(item[position].locations.concat(locations));
}
}
addItem(2,['location292']);
addItem(3,['location23']);
console.log(item);
它基本上做的是搜索对象数组(item)以获取id作为我们传递给addItem()
函数的id,如果发现我们将新位置数组添加到现有项目中,如果不是,它正在创建一个具有新id和位置的新对象。
答案 1 :(得分:0)
您提出了一个包含一些权衡的问题:
translate
对象。所以,你必须更多地讨论你想要的权衡集。是否要优化添加非重复的性能或优化检索位置列表的性能。选择其中一个。
对于localStorage,您可以在LocalStorage中存储任何字符串,并且可以将非引用对象转换为具有map
的字符串,因此这种类型的结构可以存储在LocalStorage中。
例如,如果您想使用数组进行优化检索,那么您可以在添加之前检查这样的重复项:
JSON.stringify()
此外,您可以在LocalStorage中存储一系列项目,如下所示:
function addLocation(item, newLocation) {
if (item.locations.indexOf(newLocation) === -1) {
item.locations.push(newLocation);
}
}
然后,过了一段时间,您可以像这样检索它:
localStorage.setItem("someKey", JSON.stringify(arrayOfItems));