我有一个包含15k对密钥的文本文件:值条目(字符串,平均长度25chars),根据键值按字母顺序存储。像这样:
key1:val1
key2:val2
...
我需要存储它并从用户脚本中访问它。最有效的方法是什么?
我想过创建一个简单的JavaScript对象,在usercript中存储那些key:value条目。这是我目前的代码:
var string = `the_text_file_contents`.split("\n"), obj = {};
string.forEach(function(pair){
pair = pair.split(":");
obj[pair[0]] = pair[1];
});
虽然访问速度很快(简单object[key]
),但对象会占用大量内存。我可以创建一个数组,我想这将需要更少的内存,但访问速度较慢(使用二进制搜索优化)。
我不太了解JS,那么还有另一种更有效的方法吗?
答案 0 :(得分:1)
如果您想要商店变量,可以使用 localStorage 。
if (!localStorage.firstLoad)
localStorage.firstLoad = new Date();
console.log(localStorage.firstLoad); // You will get the same date
只读的localStorage属性允许您访问Document的源的Storage对象;存储的数据将保存在浏览器会话中。 localStorage类似于sessionStorage,但是当localStorage中存储的数据没有到期时间时,存储在sessionStorage中的数据会在页面会话结束时清除 - 也就是说,当页面关闭时。 https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
你必须只解析一次dico,并且复制/粘贴对象构造函数会更有效。
const obj = {
"ciel": "bue",
"night": "dark",
"pizza": "like"
};
console.log(obj);
// STEP 1 : PARSE
const string = `ciel:bue\nnight:dark\npizza:like`.split("\n"),
obj = {};
string.forEach(function(pair) {
pair = pair.split(":");
obj[pair[0]] = pair[1];
});
console.log(obj);
// STEP 2 : SAVE OBJ TO JSON & COPY/PAST ON YOUR FILE
document.getElementById("output2").value = "const obj = " + JSON.stringify(obj, "\n", 2) + ";";
<textarea id="output2" rows="5" cols="20"></textarea>