如何使用动态数组在JavaScript中创建地图

9
我有这个要求。根据传递函数的参数数量,我需要在我的映射中创建同样数量的条目。例如,我有一个名为myfunc1(a,b,c)的函数,我需要一个键值为"a"、"b"和"c"的映射,并且我可以拥有每个键的多个值。但问题在于,我事先不知道这些键会有多少值。随着值的到来,我需要将它们添加到与映射中匹配键对应的值列表中。我如何在Javascript中实现这个功能?我已经找到了像下面这样的静态答案。但我想要动态地做到这一点。我们可以使用push方法吗?
var map = {};
map["country1"] = ["state1", "state2"];
map["country2"] = ["state1", "state2"];
2个回答

18

我想这就是你要问的。如果在映射中没有该键,addValueToList将动态创建数组/列表。

//initially create the map without any key
var map = {};

function addValueToList(key, value) {
    //if the list is already created for the "key", then uses it
    //else creates new list for the "key" to store multiple values in it.
    map[key] = map[key] || [];
    map[key].push(value);
}

我们现在拥有一个快捷操作符,它可以进行null/else检查:map[key] ??= [],该操作符在本评论发布时全球浏览器支持率达到84%。 - sfdcfox

1
你可以使用参数列表来为对象填充与作为参数传递的字符串相对应的键。然后,你可以编写另一个函数来使用数据填充此映射。
var createMap = function() {
    var map = {};
    Array.prototype.slice.call(arguments).forEach(function ( arg ) {
        map[arg] = null;
    });
    return map;
}
createMap('para1', para2', para3')会返回一个具有3个键的对象:para1,para2,para3。所有键都具有null值。如果您想在一个函数中完成所有操作,您可以将null替换为对要分配给该键的数据的引用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接