将对象推入对象列表对象

时间:2013-09-01 11:56:04

标签: javascript

有史以来最简单的问题,我还没有找到正确答案。

获得对象列表:object_list = {}

得到了对象:object_x = {...}

如何将object_x添加到object_list[objects_x]

我尝试过:object_list[objects_x][object_list[objects_x].length] = object_x,但object_list[objects_x].length未定义。

push()也不起作用。

我真的需要为此定义外部计数器吗?

请不要将我列为对象列表。请注意objects_xobject_x之间的差异。

在PHP中没有像$array['something'][] = $somedata那样的简单解决方案?

4 个答案:

答案 0 :(得分:2)

object_list['object_x'] = object_x;
// or
object_list.object_x = object_x;

console.log(object_list.object_x === object_list['object_x'])

如何使用对象 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

答案 1 :(得分:1)

当你创建一个像var stuff = {}这样的变量时,你正在创建一个空的对象文字,除了从Object继承的属性之外,它没有任何属性(属性或方法)。如果要将对象存储在此对象的各种列表中,则需要先创建这些列表。

var stuff = { shelves: [], selectors: [], images: [], additional: [] };

现在,您可以根据需要随意添加任何内容。

var image = { src: '/path/to/image.jpg' };
stuff.images.push(image);

只需在stuff上设置新属性,就可以向stuff添加更多列表。

stuff.some_other_list = []

希望它有所帮助。

答案 2 :(得分:0)

你的基本假设是错误的。

此:

var object_list = {}

列表。它不是一个数组,你不能通过索引引用它的项目,因此它也没有.length属性。

你所追求的是一个简单的阵列:

var object_list = [];

现在您可以将项目推入其中:

object_list.push(object_x);

编辑:根据你的评论和编辑,我认为你真正想要的是几个辅助函数:

function AddToList(list, item) {
    var counter = 0;
    for (var key in list)
        counter++;
    var key = "item_index_" + counter;
    list[key] = item;
}

function GetItemByIndex(list, index) {
    var counter = 0;
    var existingKey = "";
    for (var key in list) {
        if (counter == index) {
            existingKey = key;
            break;
        }
        counter++;
    }
    return (existingKey.toString().length > 0) ? list[existingKey] : null;
}

有了这些,你现在可以拥有这样的代码:

var mainList = {};
var newItem = { "foo": "bar" };
AddToList(mainList, newItem);
var dummy = GetItemByIndex(mainList, 0)["foo"]; //will contain "bar"

Live test case

答案 3 :(得分:0)

如果你有兴趣使用object而不是array,你可以像这样使用:

var object_list = {};
var object_x = {'prop1':'val1'};

// add object
object_list.myobj = object_x;

// for access, same scheme.
object_list.myobj.prop1 = 'valX';

// for loop thru    
for (var key in object_list) {
   var obj = object_list[key];
   obj.prop1 = 'valY';
}