2015-04-19 2 views
-4

У меня есть объектПродлить объект с тем же именем теги

$a = {'fruit' : 
    { 'name' : 'apple', 'cost' : '5.00' } 
} 

и другой объект

$b = {'fruit' : 
    { 'name' : 'pear', 'cost' : '4.00' } 
} 

Как я могу использовать JQuery или любую библиотеку JS сделать 2 копии одного и того же объекта в моем объект результата? То есть Я хотел бы конечный объект, чтобы быть

$basket = {'basket' : 
    {'fruit' : 
     { 'name' : 'pear', 'cost' : '4.00' } 
    }, 
    {'fruit' : 
     { 'name' : 'apple', 'cost' : '5.00' } 
    } 
} 

Однако библиотеки JQuery сливаться только свойства 2-го объекта в первый.

+1

У вас неправильный синтаксис в определении '$ basket' ​​ – hindmost

+2

Недействительный JSON. Вы можете иметь в виду '' корзина ': [$ a, $ b] ' – mplungjan

+1

Используйте массив для корзины и нажмите там фрукты. – shakib

ответ

1

У вас не может быть двух свойств с одним и тем же именем на одном объекте; однако вы можете иметь одно свойство с массивом .

Если вы хотите построить его из ваших $a и $b переменных:

var $a = { 
 
    'fruit': { 
 
    'name': 'apple', 
 
    'cost': '5.00' 
 
    } 
 
}; 
 

 
var $b = { 
 
    'fruit': { 
 
    'name': 'pear', 
 
    'cost': '4.00' 
 
    } 
 
}; 
 

 
var $basket = { 
 
    'fruit': [$a.fruit, $b.fruit] 
 
}; 
 

 
snippet.log($basket.fruit[0].name); // apple 
 
snippet.log($basket.fruit[1].name); // pear
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

Если вы хотите просто объявить корзинку без $a и $b:

var $basket = { 
 
    'fruit': [ 
 
    { 
 
     'name': 'apple', 
 
     'cost': '5.00' 
 
    }, 
 
    { 
 
     'name': 'pear', 
 
     'cost': '4.00' 
 
    } 
 
    ] 
 
}; 
 

 
snippet.log($basket.fruit[0].name); // apple 
 
snippet.log($basket.fruit[1].name); // pear
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>


Side Примечание: Вам не нужно ' вокруг имен свойств в ваших инициализаторах объектов, так как они подходят правила имени свойства литералов (но ' безвредны).

Сторона Примечание 2: Если вы хотите, чтобы ваши значения для чисел cost были цифрами, вы не хотите, чтобы вокруг них находилось '.

Боковое примечание 3: Обратите внимание, что я добавил var перед именами переменных. Ваш код падал до The Horror of Implicit Globals, создавая глобальные переменные (не локальные, как в PHP), поскольку они не объявляли их.

Боковое примечание 4: Обычно в коде JavaScript нет префикса переменных с $. Вы могут, но это не обычная практика, за исключением того, что некоторые люди делают это при использовании jQuery, чтобы указать, что переменная относится к объекту jQuery.

1

Этикетки свойств объекта должны быть уникальными. Создайте объект, в котором свойство basket представляет собой массив объектов [fruit], и вы можете перебирать корзину. Пример:

var a = {'fruit' : 
 
      { name : 'apple', cost : 5.00 }, 
 
      'misc' : 
 
      { name: 'decorative fruit basket', cost: 7.89 }  
 
     }; 
 
var b = {'fruit' : 
 
    { name : 'pear', cost : 4.00 } 
 
} 
 

 
var c = {basket: [a, b]}; 
 
var result = document.querySelector('#result'); 
 

 
result.innerHTML = JSON.stringify(c, null, ' '); 
 

 
var i = c.basket.length; 
 
while (i--) { 
 
    if (c.basket[i].fruit.name === 'pear') { 
 
    result.innerHTML += '\n**Found pear, cost is: '+ c.basket[i].fruit.cost.toFixed(2); 
 
    } 
 
}
<pre id="result"></pre>

0

Да. Вам понадобится список предметов (в качестве корзины). Проверьте это:

{ 
    "basket": [ 
    { 
     "fruit": { 
     "name": "pear", 
     "cost": "4.00" 
     } 
    }, 
    { 
     "fruit": { 
     "name": "apple", 
     "cost": "5.00" 
     } 
    } 
    ] 
} 

Вы можете играть с генератором JSON Schema: http://jsonschema.net/ - он проверяет на валидность и что более важно, создает схему, которую можно использовать для проверки ваших объектов.

Другие также отметили, что для вашей структуры данных может потребоваться некоторое переосмысление. Вы можете, например, хранить имена плодов, как ключ для словарной статьи, например:

{ 
    "basket": [ 
    { 
     "pear": "4.00" 
    }, 
    { 
     "apple": "5.00" 
    } 
    ] 
} 

Образцовый, это дает следующую схему:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "/", 
    "type": "object", 
    "properties": { 
    "basket": { 
     "id": "basket", 
     "type": "array", 
     "items": [ 
     { 
      "id": "0", 
      "type": "object", 
      "properties": { 
      "pear": { 
       "id": "pear", 
       "type": "string" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 
+0

Кроме того, попробуйте использовать термины с помощью jsonlint или даже jslint, что помогает избежать множества разочарований, поскольку они лучше подходят для того, чтобы рассказать вам о проблемах в вашем коде, чем, например, консоли браузера. – riot

0

Try

var a = { 
 
    "fruit": { 
 
    "name": "apple", 
 
    "cost": "5.00" 
 
    } 
 
}; 
 

 
var b = { 
 
    "fruit": { 
 
    "name": "pear", 
 
    "cost": "4.00" 
 
    } 
 
}; 
 

 
var basket = {}; 
 

 
basket[0] = a; 
 
basket[1] = b; 
 

 
/* 
 

 
// `basket` 
 

 
{ 
 
    "0": { 
 
     "fruit": { 
 
      "name": "apple", 
 
      "cost": "5.00" 
 
     } 
 
    }, 
 
    "1": { 
 
     "fruit": { 
 
      "name": "pear", 
 
      "cost": "4.00" 
 
     } 
 
    } 
 
} 
 
*/ 
 

 
document.getElementsByTagName("pre")[0] 
 
.innerText = JSON.stringify(basket, null, 4);
<pre></pre>

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