我正在制作单词词典,因此有1,000,000多个单词。
当我需要存储单词constructor
时,就会出现问题。我知道这是javascript中的保留字,但我需要将它添加到字典中。
var dictionary = {}
console.log(dictionary ['word_1'])
//undefined, this is good
console.log(dictionary ['word_2'])
//undefined, this is good
console.log(dictionary ['constructor'])
//[Function: Object]
// this cause initialization code to break
我该如何解决这个问题?我可以像key=key+"_"
一样捣乱,但这看起来很糟糕。还有什么我可以做的吗?
答案 0 :(得分:4)
您可以使用内置的Map
类型而不是使用JS对象,该类型使用字符串/符号作为键,并且不会与任何现有属性冲突。
替换
var dictionary = {}
与var dictionary = new Map()
答案 1 :(得分:0)
constructor
键覆盖为undefined
根据the MDN Object.prototype page,__fieldname__
架构未隐藏的唯一内容是"构造函数字段"。因此,您只需通过{ 'constructor': undefined }
初始化对象。
但是,您必须确保在for .. in
语句中过滤掉所有以undefined
为其值的键,因为它会将constructor
作为&#34获取;有效"键(即使它没有特别设置为未定义之前)。即。
for(var key in obj) if(obj[key] !== undefined) { /* do things */ }
否则,您只需在“提取”时检查类型。或者'存储'它。即。
function get(obj, key) {
if(typeof obj[key] !== 'function') // optionally, `&& typeof obj[key] !== 'object')`
return obj[key];
else
return undefined;
}
答案 2 :(得分:0)
我认为你应该将所有单词和它们的翻译存储在一个数组中。当您需要翻译单词时,可以使用数组的find
方法。
例如:
var dict = [
{ word: "abc", translated: "xyz" },
...
];
然后:
var searching_word = "abc";
var translation = dict.find(function (item) {
return item.word == searching_word;
});
console.log(translation.translated);
// --> xyz
答案 3 :(得分:0)
要获得预期结果,请使用以下选项使用index获取任何键值的值
var dictionary = {};
var dictionary1 = {
constructor: "test"
};
//simple function to get key value using index
function getVal(obj, val) {
var keys = Object.keys(obj);
var index = keys.indexOf(val);//get index of key, in our case -contructor
return obj[keys[index]]; // return value using indec of that key
}
console.log(getVal(dictionary, "constructor"));//undefined as expected
console.log(getVal(dictionary1, "constructor"));//test
console.log(dictionary["word_1"]);
//undefined, this is good
console.log(dictionary["word_2"]);
//undefined, this is good
codepen - https://codepen.io/nagasai/pen/LOEGxM
为了测试,我给了一个带有key-constructor的对象和没有构造函数的其他对象。
基本上我首先获得键的索引并使用索引
获取值