свойство объекта javascript / манипулирование массивом - PullRequest
1 голос
/ 30 декабря 2011

Некоторые свойства объекта / манипулирование массивом. Есть ли лучший синтаксис для выполнения части 2 и 3?

// 1. create object and add element/arrays
var myObject = {};
myObject["123"] = { "A": 123, "B": 456 };  // add 
myObject["123"] = { "C": 123, "D": 456 };  // add more elements to array in element!
myObject["124"] = { "A": 123, "B": 456 };
myObject["125"] = { "A": 123, "B": 456 };
console.log(myObject);

// 2. delete first property in array
for (property in myObject){
        delete myObject[property];
        break;
    }

// 3. show first remaining property
for (property in myObject){
        x = property;
        console.log("first remaining property is " + x );
        break;
    }

Ответы [ 3 ]

2 голосов
/ 30 декабря 2011

Я не уверен, почему вы идете только наполовину со своим синтаксисом литералов объектов (JSON имитирует объявления литералов объектов), но это также создало для вас ошибку.Вы переписываете myObject ["123"] во втором назначении.

Вы могли бы намного проще написать весь этот раздел 1 как:

var myObject = {
    "123": {
        "A": 123,
        "B": 456,
        "C": 123,
        "D": 456
    },
    "124": {
        "A": 123,
        "B": 456
    },
    "125": {
        "A": 123,
        "B": 456
    }
}

Второй и третий, естьнет такого понятия, как «первое свойство в массиве».Это довольно распространенная ошибка для людей, которые пишут javascript (не только для новых людей, но и для людей, которые пишут его годами).

Ни при каких обстоятельствах что-либо такоелюбая часть объекта когда-либо"Первый" или "второй" или имеет какой-либо порядок в объекте.Это четко указано в спецификации ECMA-262.Поставщики браузеров иногда приспосабливаются к такому поведению, поэтому иногда оно работает.

Это потому, что объекты не являются массивами и никогда не будут.Если вы хотите, чтобы все было в порядке массива, вам нужно использовать массив.Позвольте мне спросить вас, что является «первым» элементом в объекте документа?Ясно, что это глупый вопрос, но он доказывает суть.Объекты не поддерживают порядок, вот что делают массивы.

Так что используйте для этого массив.Квадратные скобки обозначают массив, который не принимает строку в качестве ключа (это то, что делают объекты).Чтобы сделать вещи более запутанными, массивы - это объекты, поэтому они могут действовать как объекты - не путайте это и думайте, что объекты - это массивы.

1 голос
/ 30 декабря 2011
myObject["123"] = { "C": 123, "D": 456 }; 

не не добавляет больше элементов к объекту (ассоциативный массив), он заменяет их; чтобы добавить элементы, вам нужно написать:

myObject["123"].C =123;
myObject["123"].D = 456;

Что касается # 2 и # 3, объекты Javascript не гарантируют возвращение свойств в том порядке, в котором они были добавлены; для этого вам придется прибегнуть к массиву, а затем, настроив данные в соответствии с различными структурами данных, вы можете получить первый элемент с:

myArray.shift()
0 голосов
/ 30 декабря 2011

Вы можете использовать Object.keys() в браузерах, которые его поддерживают:

console.log("first remaining property is " + Object.keys(myObject)[0] );

Хотя я не уверен, гарантирован ли порядок при любом подходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...