0

我有这样的事情:

var input = [];
var result = {};
input.push({
                key:  1,
                value: Value
                });
                result[input[0].key] = input[0].value;

如果我想从我调用的键中获取值result[key],但是如果我想从某个值中获取键怎么办?有任何想法吗?

4

3 回答 3

2

您可以创建值→键的逆映射;但是,不能保证值是唯一的(而键必须是唯一的),因此您可以映射值→键数组。

function inverseMap(obj) {
  return Object.keys(obj).reduce(function(memo, key) {
    var val = obj[key];
    if (!memo[val]) { memo[val] = []; }
    memo[val].push(key);
    return memo;
  }, {});
}

var a = {foo:'x', bar:'x', zip:'y'};
var b = inverseMap(a); // => {"x":["foo","bar"],"y":["zip"]}

[更新]如果你的价值观绝对是独一无二的,那么你可以简单地这样做:

function inverseMap(obj) {
  return Object.keys(obj).reduce(function(memo, key) {
    memo[obj[key]] = key;
    return memo;
  }, {});
}

inverseMap({a:1, b:2})); // => {"1":"a","2":"b"}

当然,这些解决方案假定值是字符串表示有意义的对象(非复杂对象),因为 JavaScript 对象只能使用字符串作为键。

于 2013-06-13T17:21:18.277 回答
0

一个值可能有多个键,因此我建议遍历所有键并将具有值的键添加到列表中。

你打算递归复杂值吗?

于 2013-06-13T17:21:06.473 回答
0

您可以使用 underscore.js 的 find 方法...

var key = _.find(result, function(val) {
    return val === 'value';
}).key;

这将在您的结果中搜索值并返回对象,然后您可以从中获取密钥。

下划线是我最喜欢的处理这类事情的工具之一。里面有很多强大的方法。

于 2013-06-13T17:33:33.273 回答