2013-04-15 73 views
1

这应该很容易,但我在这里有点困惑。我想填补这个对象:Jquery像数组填充对象

var obj = { 2:some1, 14:some2, three:some3, XX:some4, five:some5 }; 

但在一开始我有这样的:

var obj = {}; 

I'm作出的,但我不知道怎么加,我用推( ),但不起作用。任何帮助?

+0

因此,你的钥匙不按顺序,并有不同的名称计划? – Jlange

+0

是的,他们是不一样的 – RicardoGonzales

回答

2

你不能.push()成JavaScript对象,因为它使用的自定义键,而不是指数的。这样做的方式是非常喜欢这样的:

var obj = {}; 

for (var k = 0; k<10; k++) { 
    obj['customkey'+k] = 'some'+k; 
} 

这将返回:

obj { 
    customkey0 : 'some0', 
    customkey1 : 'some1', 
    customkey2 : 'some2', 
    ... 
} 

请记住,一个数组:['some1','some2']是basicly喜欢和对象: { 0 : 'some1', 1 : 'some2' } 当一个对象替换“索引”(0,1等)由一个STRING键实现。 希望这有助于。

+0

这对我来说非常好!谢谢。 – RicardoGonzales

1

push()是用于数组,但您正在创建一个对象。

您可以在几个不同的方式添加属性的对象:

obj.one = some1; 

obj['one'] = some1; 
0

我会写一个简单的函数是这样的:

function pushVal(obj, value) { 
    var index = Object.size(obj); 
    //index is modified to be a string. 
    obj[index] = value; 
} 

然后在你的代码,当你想将值添加到一个对象,你可以简单地调用:

for(var i=0; i<someArray.length; i++) { 
     pushVal(obj, someArray[i]); 
    } 

有关信息我使用的大小函数,请参阅here。请注意,可以使用for循环中的索引,但是,如果要将多个数组添加到此对象中,我的方法可以防止冲突的索引。

编辑

看到你在你的问题,例如改变你的钥匙,以创建对象,你可以使用以下命令:

function pushVal(obj, value, key) { 
    //index is modified to be a string. 
    obj[key] = value; 
} 

or 

obj[key] = value;  

我不知道你怎么确定你的关键价值,所以如果没有这些信息,我不能写一个解决方案来重新创建对象,(因为它们看起来是随机的)。

+0

听起来不错,但你可以去那个“原型”。类似于 Object.prototype.pushVal = function(index,value){this [index] = value; 返回此; } 而你只需要去: var obj = {} obj。pushVal('some1','some1'的一些值); “返回这个”只是为了确保你能排队这样的事情: obj.pushVal('1','test')。pushVal('2','另一个测试') – Bene

+0

我避免原型简单因为Object.prototype对变化很敏感,修改它时应该非常小心。 – Jlange

+0

是真的。其实这一个会有问题,但它只是展示一些其他可能的解决方案。 – Bene