在KRL中迭代Hash的最佳方法是什么?

假设我有一个哈希,我不知道哈希的内容(所以我不能使用选择这个).以下是哈希的示例:

{ "key1" : "value1", "key2" : "value2", "key3" : "value3" }

我想迭代这个哈希并创建以下数组:

["key1=value1", "key2=value2", "key3=value3"]

我的第一种方法是构建一个递归函数,迭代遍历哈希并填充数组,但我不确定是否可以完成.在一个数组中,我可以使用head()和tail()来帮助进行递归,但是这些运算符不能用于哈希(据我所知).

我想从一个函数中启动它,因为我在一个模块中这样做.例如:

hash_to_array = function(h) {
  // magic code here
}

manipulate_params = function(params) {
  params_array = hash_to_array(params);
  // more code here...

}
迈克,在撞击之后,我将花时间为哈希构建一个key()运算符.

与此同时,我所做的就是保持一个单独的键数组.这样,我可以在索引上使用map,filter和所有set操作,然后使用这些值作为哈希操作的键

key_array = ["key1","key2","key3"];
my_hash = { "key1" : "value1", "key2" : "value2", "key3" : "value3" };

这实际上只有在您控制散列中的值时才有效,但这里有一些示例代码:

global {
    kvHash = { "key1" : "value1", "key2" : "value2", "key3" : "value3" };
    kArray = ["key1","key2","key3"];
  }

pre {
        pickKey = kArray[1];
        value = kvHash.pick("$.#{pickKey}");
        // add a new value
        newKey = "key4";
        newVal = "value4";
        newArray = kArray.union(newKey);
        newHash = kvHash.put([newKey],newVal);
}

注意到我使用set运算符union来保持数组中的唯一值

生成的javascript显示了它的作用:

var pickKey = 'key2';
var value = 'value2';
var newKey = 'key4';
var newVal = 'value4';
var newArray = ['key1', 'key2', 'key3', 'key4'];
var newHash = {'key2' :'value2','key1' :'value1','key4' :'value4','key3' :'value3'};

现在,您可以使用mapfilter运算符将每个值分别传递给函数

c.map(function(x){x+2})

c.filter(function(x){x<5})
相关文章
相关标签/搜索