如何在javascript中找到映射的大小

如何在javascript中找到映射的大小,javascript,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

我想用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>
我可以看到输出:

0 
0 1 
0 1 2 
0 1 2 3 

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

您将
map
视为一个数组,并使用
[]
访问它的键/值项。您需要使用
Map
的实际方法。使用和,而不是
[]

现在,您正在设置
映射
的实际属性,这些属性与数据结构存储的实际可跟踪iterable k/v项不同

//不正确
常数m1=新映射();
m1[“foo”]=“bar”;
console.log(m1.长度);//未定义
console.log(m1.size);//0
//正确的
常数m2=新映射();
m2.设置(“foo”、“bar”);
控制台对数(m2.长度);//未定义

控制台日志(m2.大小);//1
您将
映射
视为一个
数组
。您应该使用map上的
get
set
方法来使用内置函数,而不是以数组方式[]。如果使用不正确,Javascript无法计算映射的大小

如果无法更改代码,则可以使用自己的函数来计算大小

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

    return len;
}

alert(getMapSize(mapp));

对海报代码的注释,正确的调用应类似于本教程中的示例:

取决于数据结构,对于类似数组的对象,我们可以通过以下方式获得贴图大小:

Object.getOwnPropertyNames(responseJson.result.priceMap).length;

请参阅

它适用于空映射以及带有值的映射

var list={}; console.log(Object.key(list.length))

结果=0

list={“key”:“hello”};
console.log(Object.key(list.length))

贴图类型有一个特殊的原型来获取贴图对象的长度

const map1 = new Map();

map1.set('a', 'alpha');
map1.set('b', 'beta');
map1.set('g', 'gamma');

console.log(map1.size);
// expected output: 3

你的意思是
.length
?你不能用方括号
[]
地图中提取项目,你可以使用
.get()
@swonder,是的,地图的长度或地图中键的总数。不,我的意思是用
.length
代替.size()数组的。@Arya您希望它是什么?但是现在我在使用
.get()
@Arya打印地图条目时遇到了麻烦。请添加任何相关信息,您可以对您的问题进行编辑。只有代码的答案通常被认为是低质量的。你能给你的答案加一个解释吗?欢迎来到SO!这个答案没有帮助;我认为你把地图和集合与普通物体混淆了。如果您阅读了链接的问题,您应该注意到,该问题说明此方法不适用于贴图和集。如果你阅读关于这个问题的其他答案,你会发现OP的实际问题是什么。我建议删除此答案。这里的主要问题是问题评论部分提到的@zero298的
Map()
用法不正确:
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.getOwnPropertyNames(obj).length); 
// logs 3
const map1 = new Map();

map1.set('a', 'alpha');
map1.set('b', 'beta');
map1.set('g', 'gamma');

console.log(map1.size);
// expected output: 3