Javascript映射返回未定义的,尽管(键、值)对已定义

Javascript映射返回未定义的,尽管(键、值)对已定义,javascript,node.js,Javascript,Node.js,我使用nodejs在linux终端上运行这个代码片段。虽然键、值对设置正确,但代码打印时未定义。对此问题有何解释或解决方法 function trial() { var obj1 = {}; var obj2 = {}; obj1.fund = 1; obj1.target = 2; obj2.fund = 1; obj2.target = 2; states = []; states.push(obj1); states.

我使用nodejs在linux终端上运行这个代码片段。虽然键、值对设置正确,但代码打印时未定义。对此问题有何解释或解决方法

function trial() {
    var obj1 = {};
    var obj2 = {};
    obj1.fund = 1;
    obj1.target = 2;
    obj2.fund = 1;
    obj2.target = 2;
    states = [];
    states.push(obj1);
    states.push(obj2);
    actions = [1,2,3,4];
    table = new Map();
    for (var state of states) {
        for (var action of actions) {
            cell = {};
            cell.state = state;
            cell.action = action;
            table.set(cell, 0);
        }
    }
    var obj = {};
    obj.state = states[1];
    obj.action = actions[1];
    console.log(table.get(obj));   
}

试试这个。你可能会得到你所需要的。我做了一个小小的美化

function trial() {
    var obj1 = {
            fund: 1,
            target: 2
        },
        obj2 = { 
            fund: 1,
            target: 2
        },
        obj = {},
        states = [
            obj1, obj2
        ],
        actions = [1,2,3,4],
        table = new Map(),
        cell
    ;
    for (var state of states) {
        for (var action of actions) {
            cell = {};
            cell.state = state;
            cell.action = action;
            table.set(cell, 0);   
        }
    }
    obj.state = states[1];
    obj.action = actions[1];
    return(obj);
    //console.log(table.get(obj));   
}
console.log(trial())

您需要原始对象引用来匹配tableMap中的键,让我们保留每个对象引用的新单元格来显示它

即使你有一个对象的深层克隆,要映射,它也不是同一个键

var obj1={}; var obj2={}; obj1.fund=1; obj1.target=2; obj2.fund=1; obj2.target=2; 国家=[]; states.pushobj1; states.pushobj2; 行动=[1,2,3,4]; 表=新地图; var objRefs=[]; var计数=0; 对于var状态{ 对于动作的var动作{ 单元格={}; cell.state=状态; cell.action=动作; table.setcell,count; objRefs.pushcell;//保留对象引用 计数++; } } 对于var i=0;iconsole.logtable.getdeepCloneSecondObj;返回什么?此代码不返回任何内容。您显然是在谈论console.log。你有没有试图简化这段难看的代码?这样做时,您可能会发现什么是错误的,为什么当您有var obj=new Object时,您希望table.getobj返回任何东西注意:这就是var obj={}的缩写。很抱歉,我刚才说的是console.log。基本上,我想创建一个映射,然后稍后查询它。但是,即使使用相同的数据,映射仍返回未定义。我是javascript新手,所以遇到了一些麻烦。