对象值为数组但具有相同的引用

时间:2014-06-13 12:06:45

标签: javascript arrays

我有一个具有动态属性的对象。根据某些事件删除并添加这些属性中的每一个。我想在这个对象中有一个函数或属性,它可以返回值的数组,但始终具有相同的引用。什么是最好的方法呢?

例如,如果对象的当前状态是

var obj = {"410f0ec7bd420d6eafea36bedb716ade" : { 'name' : 'dark'} }
var values = obj.someFunction()

值应为[{ 'name' : 'dark'}]

如果obj的当前状态是

{"410f0ec7bd420d6eafea36bedb716ade" : { 'name' : 'dark'} ,
"f44abc3bb1dad3cd20e97e6a21416830": { 'name' : 'magic'}}

值应为[{ 'name' : 'dark'},{ 'name' : 'magic'}]

数组和属性的引用永远不会更改(除非它们被删除)。

3 个答案:

答案 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内按需更新。

如果您提供更具体的代码,我会更新我的答案。