【问题标题】:how to create a map in javascript with array of values dynamically如何在javascript中动态创建具有值数组的地图
【发布时间】:2016-01-06 08:33:53
【问题描述】:

我有这个要求。根据函数中传递的参数数量,我需要在我的地图中创建那么多条目。假设我有一个函数 myfunc1(a,b,c) ,我需要一个键为“a”、“b”和“c”的映射,并且每个键可以有多个值。但问题是我事先不知道这些键会有多少值。当值到来时,我需要将它们添加到与映射中匹配键对应的值列表中。我如何在javascript中做到这一点?我找到了如下静态答案。但我想动态地做到这一点。可以用push方式吗?

var map = {};
map["country1"] = ["state1", "state2"];
map["country2"] = ["state1", "state2"];

【问题讨论】:

    标签: javascript node.js dictionary functional-programming


    【解决方案1】:

    我想这就是你要问的。 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% 的全球浏览器支持。
    【解决方案2】:

    您可以使用参数列表来使用与作为参数传入的字符串相对应的键填充对象。然后你可以编写另一个函数来用数据填充这个地图。

    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 替换为对您希望密钥拥有的数据的引用。

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 1970-01-01
      • 2022-01-06
      • 2012-10-01
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多