1

我有这个代码:

var getValuesArray = [];
var setValuesArray = [];


function SetValueJson(key, value, scormVersion, methodCalled)
{
   if (key1 != null) {
     var obj = {
      key: key1,
     value: value1
   }
   setValuesArray.push(obj);
   alert("pushing the key as: " + setValuesArray[key] + " and value as: " + setValuesArray[key].value); //not shure how te reference it?
   return value;
}

和:

function GetValueJson(key, scormVersion, methodCalled) {
   //I will get to this later, want to get the array right first

}

如何引用数组?alert("将键按为:" + setValuesArray[key] +" 和值作为:" + setValuesArray[key].value); 是不正确的..

谢谢

4

2 回答 2

2

我建议你使用Object而不是Array.

修改后的代码

var setValuesArray = {};

function SetValueJson(key, value, scormVersion, methodCalled)
{
    setValuesArray[key]= value;

alert("按下键为:" + key + " 值为:" + value); 返回值;}

function GetValueJson(key, scormVersion, methodCalled) {
          return setValuesArray[key]; // will return 'undefined' if key is not present.
}
于 2012-10-04T10:32:15.453 回答
0

嗯,这基本上取决于你想用这个数据结构做什么。

如果按顺序保持这些键和值以及它们的顺序很重要,那么您需要将它们存储在array.

如果您只需要根据键查找值,那么简单object就可以了。

假设您需要保持键值数据进入时的顺序,并且为此使用数组,那么您有两个选择:

  1. 将实际的键值存储保存在object. 对于订单,维护一个单独的数组,只保留键。这是它应该看起来的样子

    var keyValueStore = {},
        keyOrderStore = [];
    
    function store(key, value) {
        keyValueStore[key] = value;
        keyOrderStore.push(key);          
    }
    
    function getValueByIndex(index) {
        // do some bounds checking ofcourse :)
        return keyValueStore[keyOrderStore[index]];
    }
    
    function getValue(key) {
        return keyValueStore[key];
    }
    
  2. 在我看来这是一个更好的选择。但是,如果您不想维护和同步两个单独的数据结构,则可以使用:

    var storage = [];
    
    function store(key, value) {
        storage.push({
            key: key,
            value: value
        });
    }
    
    function getAtIndex(index) {
        return storage[index].value;
    }
    
    function getValue(key) {
        for (var i = storage.length-1; i >= 0; i--) {
            var obj = storage[i];
            if (obj.key === key) return obj.value;
        }
    }
    

希望这可以帮助。

于 2012-10-04T14:30:18.397 回答