【问题标题】:How to loop through map and fetch only first few key value pairs and pass them to another function?如何遍历地图并仅获取前几个键值对并将它们传递给另一个函数?
【发布时间】:2020-08-20 15:52:47
【问题描述】:

我有一张地图,它的键值对如下:

map = 
    {
      "sha512-T9JWj==": [
        "mykey1597855209",
        "mykey159785520915978552101597855212"
      ],
      "sha512-lcddfd==": [
        "mykey15978552091597855210"
      ],
      "sha512-abcdfd==": [
        "otherkey15978552091597855210"
      ]
    }

我想获取第一个密钥并将其传递给另一个函数func1

同样,我想获取与该键关联的所有值并传递给第二个函数func2

地图可以有任意数量的键值对,但我只想捕获前 10 个键值对。

我可以使用以下方法捕获所有键和值:

console.log(Object.keys(map));
console.log(Object.values(map));

如何循环遍历地图并获取第一个键并将其传递给func1 并将其值传递给func2?我只需要捕获first 10 keys 和相应的值。

1) Get only 10 keys and values from the the map object
2) Loop through first key value pair
3) Pass key to `func1`
4) Pass all values associated with the key to `func2`
5) Repeat `4` and `5` until all `10` keys are read

Ordering 不重要

【问题讨论】:

  • 你能详细解释一下你想做什么吗?
  • 这些key是像sha512-T9JWj==,sha512-lcddfd==这样的固定名称还是根据响应改变?
  • 键名是固定的,不会改变。在我的问题末尾添加了更多详细信息
  • 通过`循环第一个键值对`中的第一个键值对,你的意思只是“sha512-T9JWj==": [ "mykey1597855209", "mykey159785520915978552101597855212" ],?

标签: javascript node.js arrays dictionary


【解决方案1】:

根据定义,地图实际上没有任何顺序。您可以从地图中检索所有条目并选择返回的前 10 个条目,但不能保证这些条目的返回顺序。

const entries = Object.entries(map).slice(0,10);
for (const [key, values] of entries) {
    func1(key);
    for (const value of values) {
        func2(value);
    }
}

或者,更实用的风格

Object.entries(map).slice(0,10).forEach(([key, values]) => {
    func1(key);
    values.forEach(value => func2(value));
});

【讨论】:

    【解决方案2】:

    在 ES6 中,你可以使用 Reflect.ownkeys() 然后很容易将它切成你喜欢的长度并循环它。

    map = {
          "sha512-T9JWj==": [
            "mykey1597855209",
            "mykey159785520915978552101597855212"
          ],
          "sha512-lcddfd==": [
            "mykey15978552091597855210"
          ],
          "sha512-abcdfd==": [
            "otherkey15978552091597855210"
          ]
        }
    
    Reflect.ownKeys(map).slice(0, 10).forEach((k)=>{
      console.log(k); // your func1
      console.dir(map[k]) // your func2
    })

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多