我只是想知道是否有创建一个Javascript字典,其中键顺序无关紧要(无需自己编写整个类)。这是一个例子
| Val A | Val B
Val A | --- | 1
Val B | 1 | --------
一种更简单的说明方式,我想要一个具有以下属性的对象。
obj['A']['B'] == obj['B']['A']
是否有一种简单的方法来构造一个强制执行此属性的对象?或者我是否必须自己编码约束?我希望可能有一些诡计与引用或强制执行此行为的东西。
答案 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)
)的多维字典编写一个简单的类,然后在内部将A
与B
进行内部比较,例如总是把较小的一个放在第一位,这样传入A, B
和B, 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;