如何轻松创建一个javascript 2D字典,其中键顺序无关紧要?

时间:2016-03-08 17:42:50

标签: javascript object dictionary

我只是想知道是否有创建一个Javascript字典,其中键顺序无关紧要(无需自己编写整个类)。这是一个例子

      | Val A | Val B
Val A | ---   |  1
Val B | 1     | --------

一种更简单的说明方式,我想要一个具有以下属性的对象。

obj['A']['B'] == obj['B']['A'] 

是否有一种简单的方法来构造一个强制执行此属性的对象?或者我是否必须自己编码约束?我希望可能有一些诡计与引用或强制执行此行为的东西。

3 个答案:

答案 0 :(得分:1)

如果您的密钥具有可比性,您可以在标准字典周围编写小包装,在访问集合之前将密钥按特定顺序排序。

$(document).ready(function(){
   $(window).bind('scroll', function() {
        var navHeight = 40; //Match the distance of your nav bar from the top of the window
        if ($(window).scrollTop() > navHeight) {
            $('nav').addClass('fixed');
        }
        else {
            $('nav').removeClass('fixed');
        }
    });
});

可以通过在var dictionary = { storage: {}, get: function (a, b){ if (a > b) { let x = b; b = a; a = x; } return this.storage[a][b]; }, put: function (a, b, value){ if (a > b){ let x = b; b = a; a = x; } if (typeof this.storage[a] !== "object") this.storage[a] = {}; this.storage[a][b] = value; } } dictionary.put('A', 'B', 80); dictionary.put('B', 'C', 100); dictionary.put('A', 'C', 36); console.log(dictionary.get('B', 'A')); //Prints 80 console.log(dictionary.get('C', 'B')); //Prints 100 console.log(dictionary.get('A', 'C')); //Prints 36 本身中存储元素来改进(或不改进)示例。

答案 1 :(得分:0)

  

是否有一种简单的方法来构造一个强制执行此属性的对象?

不,你不能(轻松)制作一个普通的对象(以dict[A][B]访问)强制执行此操作。

  

或者我是否必须自己编码约束?

是的,这可能是更好的方法。为包含多个参数的getter和setter(即dict.get(A, B))的多维字典编写一个简单的类,然后在内部将AB进行内部比较,例如总是把较小的一个放在第一位,这样传入A, BB, A就等同了。订购密钥后,访问通常的嵌套字典。

答案 2 :(得分:0)

这里我们直观地看到2D对称物体



var size = 5;
var table = document.getElementById('table');
var array = []; // init empty array

for(var i = 0; i < size; i++) {
	var row = document.createElement('div');
  row.setAttribute('class', 'row');
  
  array[i] = []; // create empty row to fill with column
  
  table.appendChild(row);
	for(j = 0; j < size; j++) {
  	var column = document.createElement('div');
    column.innerText = i + "." + j;
  	column.setAttribute('class', 'column');
    row.appendChild(column);
    var col_value = document.createElement('div');
  	col_value.setAttribute('class', 'col-value');
    col_value.innerText = (j+i);
    column.appendChild(col_value);
      
    array[i][j] = i+j; // apply value for each column;
  }

}

console.log(array); // print to console
&#13;
.column {
  width: 50px;
  height: 50px;
  border: 1px solid #999;
  display: inline-block;
  margin-right: 4px;
  margin-bottom: 4px;
  position: relative;
  font-size: 9px;
}
.col-value {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  text-align: center;
  font-size: 30px;
  line-height: 50px;
}
&#13;
<div id="table"></div>
&#13;
&#13;
&#13;