代码之家  ›  专栏  ›  技术社区  ›  denisjacquemin

如何使用原型javascript framewor从数组创建哈希?

  •  5
  • denisjacquemin  · 技术社区  · 16 年前

    我有一个阵列 ['red', 'green', 'blue']

    我想从这个数组创建一个新的哈希,结果应该是

    {'red':true, 'green':true, 'blue':true}
    

    使用原型实现这一目标的最佳方法是什么?

    3 回复  |  直到 9 年前
        1
  •  14
  •   Matthew Simoneau Pär Wieslander    10 年前

    只需迭代数组,然后创建哈希:

    var obj  = {};
    for(var i = 0, l = colors.length; i < l; i++) {
        obj[colors[i]] = true;
    }
    var hash = new Hash(obj);
    

    还可以从头创建新的哈希对象:

    var hash = new Hash();
    for(var i = 0, l = colors.length; i < l; i++) {
        hash.set(colors[i], true);
    }
    

    我建议你看看 documentation .

        2
  •  9
  •   Mike Fabrikant    9 年前

    此函数式JavaScript解决方案使用 Array.prototype.reduce() :

    ['red', 'green', 'blue']
    .reduce((hash, elem) => { hash[elem] = true; return hash }, {})
    

    Parameter Details :

    • 对数组中的每个值执行的回调函数。
    • 要用作回调第一次调用的第一个参数的InitialValue对象。

    回调的第三个参数是数组中正在处理的当前元素的索引。因此,如果要创建元素索引的查阅表格:

    ['red', 'green', 'blue'].reduce(
      (hash, elem, index) => {
        hash[elem] = index++;
        return hash
      }, {});
    

    返回:

    Object {red: 0, green: 1, blue: 2}
    
        3
  •  0
  •   denisjacquemin    16 年前

    谢谢大家

    这是我的解决方案 prototypejs 从费利克斯的回答中得到启发

    var hash = new Hash();
    colors.each(function(color) {
      hash.set(color, true);
    });