如何在javascript中找到地图的大小

新手上路,请多包涵

我想在 javascript 中打印地图的大小。我使用了命令 map.size 但答案是 0,这是不正确的。

这是我的源代码:

 <div id="demo" ></div>
<script>
    function add(test, key, value) {
        if (!test[key])
            test[key] = [value];
        else
            test[key].push(value);
    }
    var mapp = new Map();
    var i,j,k=0;
    for (i=0;i<5;i++)
    {
      for (j=0;j<i;j++)
      add(mapp,i,j);
    }
    document.getElementById('demo').innerHTML="Map size are: "+ mapp.size;
</script>

输出: Map size are: 0

但是,当我打印地图条目时:

 for (var m in mapp)
{
        for (k=0;k<mapp[m].length;k++)
        document.write(mapp[m][k]+"  ");

      document.write("<br>");
}

我可以看到输出:

 0
0 1
0 1 2
0 1 2 3

请告诉我如何找到地图的大小以及为什么上面的代码 mapp.size 不起作用。

原文由 Ratnesh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 205
2 个回答

你对待 Map 就像对待 Array 一样。您应该使用 getset 地图上的方法来使用内置函数,而不是数组方式 [ ]。如果你没有正确使用它,Javascript 无法计算地图的大小

如果你不能更改代码,那么你可以有自己的函数来计算大小

function getMapSize(x) {
    var len = 0;
    for (var count in x) {
            len++;
    }

    return len;
}

alert(getMapSize(mapp));

原文由 Prasann 发布,翻译遵循 CC BY-SA 4.0 许可协议

您正在对待 Map 就像一个数组,并使用 [] 来访问它的键/值项。您需要使用 Map 的实际方法。而不是 [] ,使用 .get().set()

现在,您正在设置 Map 的实际 属性,这与数据结构存储的实际跟踪可迭代 k/v 项目不同。

 // Incorrect
const m1 = new Map();

m1["foo"] = "bar";

console.log(m1.length); // undefined
console.log(m1.size); // 0

// Correct
const m2 = new Map();

m2.set("foo", "bar");

console.log(m2.length); // undefined
console.log(m2.size); // 1

原文由 zero298 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏