Вопрос по javascript – добавить новый элемент в начале JSON

4

У меня есть этот JSON:

var myVar = {
     "9":"Automotive & Industrial",
     "1":"Books",
     "7":"Clothing"
};

Я хочу добавить новый элемент в начале, я хочу в конечном итоге это:

var myVar = {
     "5":"Electronics",
     "9":"Automotive & Industrial",
     "1":"Books",
     "7":"Clothing"
};

Я пробовал это, но это не работает:

myVar.unshift({"5":"Electronics"});

Спасибо!

Проверьте следующий вопрос SO для получения подробной информации об объектах против массивов в javascript и их различных вариантах использования.stackoverflow.com/questions/688097/… Мне кажется, что вы просто хотите вложенный объект с полем ID, возможно. dwerner
unshift для массивовmyVar это не массив Musa
Объект представляет собой неупорядоченный список пар ключ-значение, поэтому «начало» отсутствует. или "конец" Andreas
Это не JSON. JSON - это строка Это просто обычное дело. код JavaScript для литерала объекта. Jonathan M

Ваш Ответ

7   ответов
2

висимо от того, в каком порядке они находятся. Если вы хотите, чтобы они были в определенном порядке дляfor-in цикл, я бы предложил переосмыслить вашу стратегию. Различные браузеры будут использовать разные подходы к упорядочению свойств. Хотя многие браузеры на самом деле обрабатывают их в том порядке, в котором вы их создали, такое поведение фактически не определено в спецификации языка, поэтому вы не можете на него полагаться.

Error: User Rate Limit Exceeded
2

жение.

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

10

Javascript objects don't have an order associated with them by definition, so this is impossible.

Вы должны использоватьarray of objects если вам нужен заказ:

var myArray = [
    {number: '9', value:'Automotive & Industrial'},
    {number: '1', value:'Books'},
    {number: '7', value:'Clothing'}
]

затем, если вы хотите вставить что-то в первую позицию, вы можете использовать метод unshift для Arrays.

myArray.unshift({number:'5', value:'Electronics'})

//myArray is now the following
[{number:'5', value:'Electronics'},
 {number: '9', value:'Automotive & Industrial'},
 {number: '1', value:'Books'},
 {number: '7', value:'Clothing'}]

подробнее здесь: Гарантирует ли JavaScript порядок свойств объекта?

2

lodash Функция слияния выглядит так:

var myObj = _.merge({ col1: 'col 1', col2: 'col 2'}, { col3: 'col 3', col4: 'col 4' });

Ваш конечный объект будет выглядеть так:

{ col1: 'col 1', col2: 'col 2', col3: 'col 3', col4: 'col 4' }

Как уже упоминалось, нет никакой гарантии, что порядок ключей в объекте останется неизменным, в зависимости от того, что вы делаете с ним. Но если вы выполняете слияние в качестве последнего шага, у вас должно быть все в порядке. Обратите внимание, что "слияние" Функция создаст совершенно новый объект, он не изменит ни один из объектов, которые вы передаете в него.

0

myObject.sort(function(a,b) { return parseFloat(a.price) - parseFloat(b.price) } );

или же

myObject.sort(function(a,b) { return parseFloat(a.get("price")) - parseFloat(b.get("price")) } );
2

что проблема unshift может исходить из того факта, что вы ассоциативный массив. Определение ассоциативного массива

Это может быть хаком, но если вы ДОЛЖНЫ иметь это значение в начале объекта JSON, как насчет:

var myNewVar={'5':'Electronics'};
for (xx in myVar) {
    myNewVar[xx]=myVar[xx];
}
1

var myVar = {
     "9":"Automotive & Industrial",
     "1":"Books",
     "7":"Clothing"
};

// if you want to add a property, then...

myVar["5"]="Electronics"; // note that it won't be "first" or "last", it's just "5"
Error: User Rate Limit Exceeded
myVar.5="Electronics";Error: User Rate Limit ExceededmyVar.["5"]="Electronics";

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