簡體   English   中英

從鍵值對中獲取鍵值

[英]Get Key From Value in Key-Value Pair

我有這樣的事情:

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

如果我想從key中獲取值,請調用result[key] ,但如果我想從某個值獲取Key怎么辦? 有任何想法嗎?

您可以創建值→鍵的逆映射; 但是,無法保證值是唯一的(而鍵必須是),因此您可以映射值→鍵數組。

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對象只能使用字符串作為鍵。

值可能有多個鍵,因此我建議迭代所有鍵並將具有值的鍵添加到列表中。

你打算為復雜的價值進行遞歸嗎?

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

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

這將搜索結果中的值並返回對象,然后您可以從中獲取鍵。

Underscore是我最喜歡處理這類東西的工具之一。 它有很多強大的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM