如何从keyvalue对列表中获取值?

时间:2015-05-29 12:30:49

标签: javascript

我试图理解JavaScript中KeyValue对列表的概念。

我必须使用数组吗?我尝试将这些数据添加到数组中:

key: 1, value: "apple"
key: 2, value: "banana"
key: 7, value: "cherry"
key: 24, value: "grapes"

但是如何在不使用循环的情况下获得密钥7的值?

我用一个例子创建JSFiddle。如何编辑此示例以返回密钥的值?此时它返回第一个输入的keyValue对的值。

JSFiddle

5 个答案:

答案 0 :(得分:4)

不要将“dict”列为键/值对列表。相反,使用一个自动为您提供所有功能的对象:

var dict = {}; // object literal

function addToList() {
    var aKey = document.getElementById("fkey").value;
    var aValue = document.getElementById("fvalue").value;
    dict[aKey] = aValue;
}

function getFromList() {
    var aKey = document.getElementById("rkey").value;
    document.getElementById("rvalue").value = dict[aKey];
}

答案 1 :(得分:2)

您正在使用JSON格式的Javascript对象数组。但是在Javascript中使用JSON格式的对象更方便。

var fruits = {
  "1": "apple",
  "2": "banana",
  "7": "cherry"
  "24": "grapes"
};

因此访问这些值也更容易:

fruits["7"]

此外,您无需自行管理密钥的唯一性。如果您使用相同的键放置一个值,旧值将被覆盖:

fruits["7"] = "strawberry";

答案 2 :(得分:1)

您可以从以下链接了解有关JavaScript对象的更多信息:

JavaScript-objects-in-detail

MDN JavaScript Object

E.g:

var fruits = {
    "1": "apple",
    "2": "banana",
    "7": "cherry",
    "24": "grapes",
};

要访问任何密钥,例如:fruits[1],输出:apple

 var fruits = {
        "apple": "1",
        "banana": "2",
        "cherry": "7",
        "grapes": "24",
    };

访问任何密钥例如:fruits.apple,输出:1

答案 3 :(得分:0)

在您的示例中,您没有使用带键值的json对象,这意味着您无法从dict数组中获取键的值,如下所示:

dict.value;

您需要查找特定键的索引才能获取值,如下所示:

function getValue (key) { 
   for (var index in dict) { 
      if(dict[index].key == key ) { 
          return dict[index].value;
      }
   }

   return 'Not Found';
}

检查 jsFiddle

答案 4 :(得分:0)

查看此plugin/gist from KnightCoder

以下是此插件的实际源代码。

/*
 * DictionaryKnight v1.0 - A very simple teeny-tiny dictionary class.
 * * @ Developer : https://github.com/KnightCoder 
 * * * You can add an item into the dictionary
 * * * You can even directly add a collection of items
 * * * You can get length of the items in the dictionary
 * * * You can easily parse and get the items in the dictionary 
 * * * Very small, fast and efficient
 */

var DictionaryKnight = function () { };
DictionaryKnight.prototype = {
    getLength: function () { return Object.keys(this).length },
    add: function (key, value) {
        this[key] = value;
        return this;
    },
    addCollection: function (arr) {
        for (var i = 0; i < arr.length; i++) {
            this.add(arr[i][0], arr[i][1]);
        }
        return this;
    }
}

它有一个很小的字典功能。

你可以像这样使用它:

var dict = new DictionaryKnight();
dict.add("en", { "language": "English", "country": "Great Britain", "sample": "This is english" });
dict.add("hi", { "language": "Hindi", "country": "India", "sample": "यह हिन्दी है" });

var arr = [];
arr.push(["es", { "language": "Spanish", "country": "Spain", "sample": "Esto es español" }]);
arr.push(["cn", { "language": "Chinese", "country": "China", "sample": "这是中国" }]);
dict.addCollection(arr);

console.log("Total data : " + dict.getLength());
for (var i = 0; i < Object.keys(dict).length; i++) {
    console.log(Object.keys(dict)[i]);
    console.log(dict[Object.keys(dict)[i]]);
    console.log("-----");
}

在第一种方法中,您可以以键值格式插入数据,在第二种方法中,您可以以二维数组格式添加数据集合。 您也可以将这两种方法组合使用,如上例所示。