سؤال

وأنا باستخدام جدول تجزئة في جافا سكريبت، وأريد أن أثبت قيم التالية في جدول تجزئة

one   -[1,10,5]
two   -[2]
three -[3, 30, 300, etc.]

ولقد وجدت التعليمة البرمجية التالية. وهو يعمل عن البيانات التالية.

   one  -[1]
   two  -[2]
   three-[3]

وكيف يمكنني تعيين واحد- [1،2] القيم إلى جدول التجزئة وكيف يمكنني الوصول إليها؟

<script type="text/javascript">
    function Hash()
    {
        this.length = 0;
        this.items = new Array();
        for (var i = 0; i < arguments.length; i += 2) {
            if (typeof(arguments[i + 1]) != 'undefined') {
                this.items[arguments[i]] = arguments[i + 1];
                this.length++;
            }
        }

        this.removeItem = function(in_key)
        {
            var tmp_value;
            if (typeof(this.items[in_key]) != 'undefined') {
                this.length--;
                var tmp_value = this.items[in_key];
                delete this.items[in_key];
            }
            return tmp_value;
        }

        this.getItem = function(in_key) {
            return this.items[in_key];
        }

        this.setItem = function(in_key, in_value)
        {
            if (typeof(in_value) != 'undefined') {
                if (typeof(this.items[in_key]) == 'undefined') {
                    this.length++;
                }

                this.items[in_key] = in_value;
            }
            return in_value;
        }

        this.hasItem = function(in_key)
        {
            return typeof(this.items[in_key]) != 'undefined';
        }
    }

    var myHash = new Hash('one',1,'two', 2, 'three',3 );

    for (var i in myHash.items) {
        alert('key is: ' + i + ', value is: ' + myHash.items[i]);
    }
</script>

وكيف أفعل ذلك؟

هل كانت مفيدة؟

المحلول

وباستخدام وظيفة أعلاه، يمكن أن تفعله:

var myHash = new Hash('one',[1,10,5],'two', [2], 'three',[3,30,300]);

وبطبيعة الحال، فإن ما يلي يعمل أيضا:

var myHash = {}; // New object
myHash['one'] = [1,10,5];
myHash['two'] = [2];
myHash['three'] = [3, 30, 300];

ولأن جميع الكائنات في جافا سكريبت هي الجداول التجزئة! فإنه، مع ذلك، يكون من الصعب تكرار عبر منذ باستخدام foreach(var item in object) من شأنه أيضا أن تحصل على جميع وظائفها، وما إلى ذلك، ولكن هذا قد يكون كافيا حسب احتياجاتك.

نصائح أخرى

وإذا كان كل ما تريد القيام به هو تخزين بعض القيم الثابتة في جدول بحث، يمكنك استخدام <لأ href = "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/ القيم، _variables، _and_literals # Object_literals "يختلط =" noreferrer "> كائن حرفية (نفس الصيغة التي تستخدمها JSON ) للقيام بذلك مضغوط:

var table = { one: [1,10,5], two: [2], three: [3, 30, 300] }

وثم الوصول إليها باستخدام بناء الجملة مجموعة النقابي جافا سكريبت:

alert(table['one']);    // Will alert with [1,10,5]
alert(table['one'][1]); // Will alert with 10

هل يمكن استخدام بلدي تنفيذ الجدول جافا سكريبت التجزئة، jshashtable . فإنه يسمح لأي كائن لاستخدامها كمفتاح، وليس فقط السلاسل.

والمترجم جافا سكريبت أصلا يخزن الكائنات في جدول تجزئة. إذا كنت قلقا حول التلوث من سلسلة النموذج، يمكنك أن تفعل دائما شيء من هذا القبيل:

// Simple ECMA5 hash table
Hash = function(oSource){
  for(sKey in oSource) if(Object.prototype.hasOwnProperty.call(oSource, sKey)) this[sKey] = oSource[sKey];
};
Hash.prototype = Object.create(null);

var oHash = new Hash({foo: 'bar'});
oHash.foo === 'bar'; // true
oHash['foo'] === 'bar'; // true
oHash['meow'] = 'another prop'; // true
oHash.hasOwnProperty === undefined; // true
Object.keys(oHash); // ['foo', 'meow']
oHash instanceof Hash; // true
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top