2013-09-01 4 views
-1

Самый простой вопрос, и я пока не нашел правильного ответа.Нажать объект в объект списка объектов

Got список объектов: object_list = {}

Got объект: 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

это 'objects_x', и это список объектов object_x, а не один объект. –

+0

Похоже, вам нужен массив (из которого 'push' IS - метод), а не объект. – Utkanos

+0

Мне нужно, чтобы оно было ассоциативным. –

ответ

0

Ваша база предположение неверно.

Это:

var object_list = {} 

ли не список. Это не массив, и вы не можете ссылаться на его элементы по индексу, поэтому он также не имеет свойства .length.

Что вы после это обычный массив:

var object_list = []; 

Теперь вы можете нажать в неё элементы:

object_list.push(object_x); 

Edit: на основе ваших комментариев и правок, я думаю, что вы на самом деле после того, как есть несколько вспомогательных функций:

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.

+0

Нет, потому что мне нужно, чтобы это был уровень 2, а не только 1. Список списков. –

+0

@FlashThunder, поэтому у вас может быть массив массивов: 'var object_list = []; object_list [0] = []; object_list [0] .С (object_x); '. Основное отличие состоит в том, что в массиве вы ссылаетесь на элементы по индексу, а не по ключу. –

+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

+0

Это не ответ на мой вопрос. Мне нужно, чтобы это список списков объектов, а не список объектов. Обратите внимание на разницу между 'objects_x' и' object_x' –

0

Если вас интересует использование объекта, а не массив, вы можете использовать, как это:

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'; 
} 
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 = [] 

Надеюсь, это поможет.

+0

Я не могу принять два ответа :(Но '+ 1', потому что я буду использовать этот путь. –

Смежные вопросы