有史以来最简单的问题,我还没有找到正确答案。
获得对象列表: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_x
和object_x
之间的差异。
在PHP中没有像$array['something'][] = $somedata
那样的简单解决方案?
答案 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"
答案 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';
}