我试图理解JavaScript中KeyValue对列表的概念。
我必须使用数组吗?我尝试将这些数据添加到数组中:
key: 1, value: "apple"
key: 2, value: "banana"
key: 7, value: "cherry"
key: 24, value: "grapes"
但是如何在不使用循环的情况下获得密钥7的值?
我用一个例子创建JSFiddle。如何编辑此示例以返回密钥的值?此时它返回第一个输入的keyValue对的值。
答案 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对象的更多信息:
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("-----");
}
在第一种方法中,您可以以键值格式插入数据,在第二种方法中,您可以以二维数组格式添加数据集合。 您也可以将这两种方法组合使用,如上例所示。