将对象推入对象列表对象

Push an object into the object list object

本文关键字:对象 列表      更新时间:2023-09-26

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

获取对象列表: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

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

当您创建像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 = []

希望能有所帮助。

您的基本假设是错误的。

此:

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"

实时测试用例。

如果你感兴趣的是使用对象,而不是数组,你可以这样使用:

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';
}