我有一个具有动态属性的对象。根据某些事件删除并添加这些属性中的每一个。我想在这个对象中有一个函数或属性,它可以返回值的数组,但始终具有相同的引用。什么是最好的方法呢?
例如,如果对象的当前状态是
var obj = {"410f0ec7bd420d6eafea36bedb716ade" : { 'name' : 'dark'} }
var values = obj.someFunction()
值应为[{ 'name' : 'dark'}]
如果obj的当前状态是
{"410f0ec7bd420d6eafea36bedb716ade" : { 'name' : 'dark'} ,
"f44abc3bb1dad3cd20e97e6a21416830": { 'name' : 'magic'}}
值应为[{ 'name' : 'dark'},{ 'name' : 'magic'}]
数组和属性的引用永远不会更改(除非它们被删除)。
答案 0 :(得分:1)
这个怎么样?它保持相同的数组。如果你愿意,你也可以将它与对象混合在一起,但是必须添加一个警卫,而不是将函数添加到值中。
var values = someFunction(obj, values);
function someFunction(obj, values) {
values = values || [];
values.length = 0;
for(var key in obj) {
values.push(obj[key]);
}
return values;
}
顺便说一句,通过将长度设置为0来清除数组是从this post收集的。
答案 1 :(得分:1)
我可能会创建一个“元”对象,该对象存储对原始对象的引用并可以返回值:
var Values = function(obj) {
this.getValues = function() {
var values = [];
for(i in obj)
values.push(obj[i]);
return values;
};
}
var original = {"410f0ec7bd420d6eafea36bedb716ade" : { 'name' : 'dark'} ,
"f44abc3bb1dad3cd20e97e6a21416830": { 'name' : 'magic'}};
var vals = new Values(original);
var values = vals.getValues();
答案 2 :(得分:0)
鉴于您似乎在" someFunction"内生成了数组。 (查看函数的代码以及如何将它附加到对象上会有所帮助),您需要保留一个数组实例并清空/重新填充它而不是创建一个新数组。它可以是您的对象的成员(obj.currentItems)或闭包内(取决于您如何创建它),并且可以在您更改其属性时或在someFunction内按需更新。
如果您提供更具体的代码,我会更新我的答案。