Вопрос по jquery, json, javascript – Добавление чего-либо к вершине объекта JSON

7

У меня есть объект JSON, который запускается при загрузке страницы, например так:

data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;

Есть ли способ ввести элемент перед первымfoo элемент, так что при выполненииfor var i in dataновый элемент будет проходить до тех элементов, которые были добавлены при инициализации объекта?

Причина в том, что я отображаю некоторые элементы пользователю. Когда пользователь добавляет новый элемент с помощью javascript, я хочу, чтобы этот новый элемент отображался над всеми существующими элементами, однако при добавлении нового элемента, т.е.

data[newItem] = newItem;

Тогда объект JSON выглядит так:

data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
data[newItem] = newItem;

Вместо того, как я хочу, а именно:

data[newItem] = newItem;
data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;

Есть идеи?

this topic наверное актуально. А именно та часть, которая гласит: если порядок актуален,use an array. James Holmes

Ваш Ответ

6   ответов
14

заказ не гарантируется. Следовательно, даже если они упорядочены в строке JSON, при анализе в виде объекта JS вы никогда не сможете предсказать, в каком порядке они появятся.

Лучше вместо этого использовать массивы. Вы могли бы использоватьunshift() способ поместить элемент в первый индекс.

var data = [bar,bar2,bar3];

data.unshift(newItem);

//data = [newItem,bar,bar2,bar3];
Error: User Rate Limit Exceeded Click Upvote
Error: User Rate Limit Exceededstackoverflow.com/questions/648139/…Error: User Rate Limit Exceededstackoverflow.com/questions/586182/…
Error: User Rate Limit Exceeded Click Upvote
Error: User Rate Limit Exceededdata["foo"]Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededvar arr = []; arr.foo = 'bar';Error: User Rate Limit ExceededfooError: User Rate Limit Exceededfor(var i = 0; i < arr.length; i++){...}Error: User Rate Limit Exceededfor(var key in data){...}Error: User Rate Limit Exceededdata = [].
-3

что вы можете преобразовать его в строку, добавить свои данные в начало строки, а затем повторно преобразовать строку в json, используя & quot; eval & quot;

Error: User Rate Limit Exceeded
Read this article from MDN
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

вы можете создать новый объект и упорядочить порядок свойств, как вы хотите. пример :

var objj1 = {name:'viru',lastname:'nehra'};

Итак, создайте новый объект с новым свойством, которое вы хотите сверху:

var obj2 = {age: 21}

и беги:

for(var key in objj1){
   obj2[key] = objj1[key]
}

obj2 = {age: 21, name: "viru", lastname: "nehra"}
3

const newObject = Object.assign({first: value}, oldObject)

Как уже упоминалось, порядок не гарантируется, но для меня это достаточно хорошо. :)

3

Который идет первым в массиве:

window.object или window.alert?

Объекты также не имеют порядка. Если вы хотите массив, используйте массив. Объекты не являются массивами.

Если ты хочешь

var ThingsInOrder = [
  FirstThing,
  SecondThing,
  ThirdThing
];
ThingsInOrder.push(ForthThing);

Используйте массив.

Если ты хочешь:

var ThingsNeverInOrder = {
  Window,
  Alert,
  Derp,
  Herp
};

ThingsNeverInOrder.foo = bar;

Используйте объект.

8

Иосиф Мечтатель& APOS; sответЯ провел несколько быстрых проверок в Firefox & amp; хром.

Firefox:

var obj = {};

obj.a = 'a';
obj.c = 'c';
obj.b = 'b';
obj['0'] = '0';

for(var i in obj){
    console.log(i);
}

//prints:
a
c
b
0

Chrome:

var obj = {};

obj.a = 'a';
obj.c = 'c';
obj.b = 'b';
obj['0'] = '0';

for(var i in obj){
    console.log(i);
}

//prints:
0
a
c
b

Похожие вопросы