1

本质上,我想要在 JavaScript 中等效于这个 Python 函数:

def to_dict(coll, key):
    return {i[key]: i for i in coll}

assert to_dict([
    {'key': 1, 'value': 1},
    {'key': 2, 'value': 2},
    {'key': 3, 'value': 3},
], 'key') == {
    1: {'key': 1, 'value': 1},
    2: {'key': 2, 'value': 2},
    3: {'key': 3, 'value': 3},
}

我知道我可以手工构建它,但是有没有简洁的方法?(可以使用jQuery或Underscore.js)

4

4 回答 4

1
function to_dict(coll, key) {
   var obj = {};
   //Unsafe to use iterator on array in JavaScript
   for (var i = 0; i < coll.length; i++) {
      obj[coll[i][key]] = coll[i];
   }
   return obj;
}

http://jsfiddle.net/R7hfX/

于 2012-07-11T07:45:57.183 回答
1

未经测试:

var to_dict = function (arr, key)
{
  return _.reduce(
    arr
  , function (rv, v) { rv[v[key]] = v; return rv; }
  , {}
  )
}
于 2012-07-11T07:54:44.110 回答
1

使用 jQuery .. 这稍微优雅一些

function to_dict(coll, key) {
    var obj = {}
    $.each(coll, function () {
        obj[this[key]] = this;
    });
    return obj;
}

http://jsfiddle.net/R7hfX/1/

于 2012-07-11T07:56:34.407 回答
0
var t = {}
for (var x in d) {
    if (d.hasOwnProperty(x)) {
        t[d[x].key] = d[x];
    }
}
于 2012-07-11T07:42:37.227 回答