我试图为一个以地图作为参数的函数编写测试,
当代码在测试之外正常运行时,参数可以采用表单(当我调用toString时):
Map { "id": "jobs", "label": "Jobs", "nodeType": "ROOT", "childNodesURI": "jobs?owner=*", "childIds": List [], "isFetchingChildren": false, "isToggled": true, "jobName": "" }
var node = {
id: "jobs",
label: "JES Jobs",
nodeType: "ROOT",
childNodesURI: "jobs?owner=*",
childIds: [],
isFetchingChildren: false,
isToggled: true,
jobName: "" };
console.log(node.get("id"));
当调用node.get(" id")时,我得到" TypeError:node.get不是函数"
我假设这是因为没有函数.get()foo一个JSON对象但不是真正确定...如果是这种情况,我如何将JSON转换或初始化为地图吗?
答案 0 :(得分:2)
您向我们展示的是一个javascript对象。如果您在这种情况下需要拨打“密钥”,则应使用theObject.theProperty
,如下所示
var node = {
id: "jobs",
label: "JES Jobs",
nodeType: "ROOT",
childNodesURI: "jobs?owner=*",
childIds: [],
isFetchingChildren: false,
isToggled: true,
jobName: ""
};
//Call the object property ID
console.log(node.id);
如果您需要地图,您需要这样:
var myMap = new Map();
// setting the values
myMap.set("id", "jobs");
console.log(myMap.get("id"));
如果您想从对象开始创建地图,可以像这样做
var node = {
id: "jobs",
label: "JES Jobs",
nodeType: "ROOT",
childNodesURI: "jobs?owner=*",
childIds: [],
isFetchingChildren: false,
isToggled: true,
jobName: ""
};
function buildMap(obj) {
let map = new Map();
Object.keys(obj).forEach(key => {
map.set(key, obj[key]);
});
return map;
}
const map = buildMap(node);
console.log(map.get("id"));
答案 1 :(得分:1)
您只需使用自己的代码访问node.id
即可。除非您自己扩展原型,否则对象文字上没有get()
方法。
Map
应该根据文档创建一个可迭代对象作为参数。但实际上我发现在使用对象而不是数组时会产生undefined is not a function
错误。
另外,在查看文档时,浏览器支持还不完整(https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map)。
例如(引自上面的链接):
[1]从Chrome 31开始,此功能可在首选项后面使用。在chrome:// flags中,激活“启用实验性JavaScript”条目。
我看到你的选择是;你可以迭代你的JSON
var m = new Map();
var json = {'foo': 'bar'};
for(var i in json) {
m.set(i, json[i]);
}
m.get('foo');
或者如果你真的不需要Map
方法坚持使用对象文字。
json.foo;