2017-06-15 85 views
0

我有一个JSON响应如下多个重复的数组,并需要添加一个新的元素&在“bcd”后使用javascript代码的值。如何在多个地方引用另一个使用JavaScript的元素将新元素添加到JSON对象?

{ 
    "id": "123", 
    "discount": [ 
     { 
      "abc": xx, 
      "bcd": xxx, 
      "mc": { 
      "dca": "xx", 
      }, 
      "typ": "xx", 
      "state": "xx", 
      "mns": [] 
     }, 

     { 
     "abc": xxx, 
     "bcd": xxx, 
     "dca": "xxx", 
     }, 
    ] 

}

预期的响应:

{ 
    "id": "123", 
    "discount": [ 
     { 
      "abc": xx, 
      "bcd": xxx, 
      "newelement":new value, 
      "mc": { 
      "dca": "xx", 
      }, 
      "typ": "xx", 
      "state": "xx", 
      "mns": [] 
     }, 

      { 
      "abc": xxx, 
      "bcd": xxx, 
      "newelement":new value 
      "dca": "xxx", 
      }, 
     ] 
} 

任何人都可以请建议如何使用JavaScript来做到这一点,

+0

'object.discount.forEach(O => 0 [为newElement = NEWVALUE)' – Rajesh

回答

1

您可以简单地使用

obj.discount.forEach(function(x) { x.newelement = "new value"; }); 

迭代通过您的discount数组并向其所有对象添加新属性。

但是,它不能保证顺序,它实际上不应该。即使一个JSON序列化程序为属性提供某种排序方式,另一个不会。
JSON不是一个字符串,也不是一个文本,它主要是数据
JSON/JS对象属性没有排序 - 这是数组和对象之间的主要区别。

了解更多关于这个话题在这里:Does JavaScript Guarantee Object Property Order?

在一般情况下,你不应该依赖于JSON对象属性的顺序,不应该指望有人依靠它。

+0

它的工作,谢谢大家 – Ambili

0

您可以映射返回新对象的折扣数组,并返回所需的所有属性。

这具有突破对象引用和可变性的优点,可以防止整个代码中的任何副作用从共同对象的变异属性中突破。

这些模式是等价的,但es6版本目前仅适用于babel编译。

const data = { 
 
    "id": "123", 
 
    "discount": [ 
 
    { "abc": 'xx' }, 
 
    { "abc": 'xxx' } 
 
    ] 
 
} 
 

 
// es5 
 
data.discount = data.discount.map(function(x) { 
 
    return Object.assign({}, x, { 
 
    newElement: 'new value' 
 
    }) 
 
}) 
 

 
// es6 
 
data.discount = data.discount.map(x => ({ 
 
    ...x, 
 
    newElement: 'new value' 
 
})) 
 

 
console.log(data)

0

这是你的问题的解决方案。小提琴https://jsfiddle.net/tt92jkhx/

变种测试= { “ID”: “123”, “折扣”:[ { “ABC”: “XX”, “BCD”: “XX”, “MC”: { “DCA”: “XX”, }, “典型值”: “XX”, “状态”: “XX”, “MNS”:[] } ] };

for(var i=0;i<test.discount.length;i++){ 
    var disc = test.discount[i]; 
    disc['newElement']='SomeValue';  
} 

console.log(test); 
0

可以使用ES6阵列for...of循环到discount阵列的对象的迭代,以add the property在阵列中的每个对象。

var jsonObj = { 
 
    "id": "123", 
 
    "discount": [ 
 
     { 
 
      "abc": "xx", 
 
      "bcd": "xxx", 
 
      "mc": { 
 
      "dca": "xx", 
 
      }, 
 
      "typ": "xx", 
 
      "state": "xx", 
 
      "mns": [] 
 
     }, 
 
     { 
 
     "abc": "xxx", 
 
     "bcd": "xxx", 
 
     "dca": "xxx", 
 
     }, 
 
    ] 
 
}; 
 

 
for (var value of jsonObj.discount) { 
 
    value.newelement = "new value"; 
 
} 
 

 
console.log(jsonObj.discount);

由于yeldar-kurmangaliyev他回答说,JSON/JS对象的属性是没有顺序的。因此,它不会保证顺序。

检查这个职位的对象属性以便更多参考:https://stackoverflow.com/a/5525820/4116300

相关问题