2017-06-15 82 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

相關問題