2017-06-02 132 views
0

有一個對象,其中每個鍵都是對象數組。修改具有對象數組的對象的鍵

例如,在下面的示例中data是具有密鑰的對象,其中每個鍵是對象的一個​​數組(一個或多個):

{ 
    "status": 200, 
    "message": "Successful", 
    "data": { 
     "manual": [ 
     { 
      "vendor_id": 1, 
      "price": 4590, 
      "discounts": { 
      "micro": 0, 
      "macro": 120 
      }, 
      "vendor": "Vendor 1", 
      "customer_rating": "3.0/5", 
      "sla_compliance": 90, 
      "system_flag": "Green" 
     } 
     ], 
     "nearest": [ 
     { 
      "vendor_id": 1, 
      "price": 4590, 
      "discounts": { 
      "micro": 0, 
      "macro": 120 
      }, 
      "vendor": "Vendor 1", 
      "customer_rating": "3.0/5", 
      "sla_compliance": 90, 
      "system_flag": "Green" 
     } 
     ], 
     "auto": [ 
     { 
      "vendor_id": 1, 
      "price": 4590, 
      "discounts": { 
      "micro": 0, 
      "macro": 120 
      }, 
      "vendor": "Vendor 1", 
      "customer_rating": "3.0/5", 
      "sla_compliance": 90, 
      "system_flag": "Green" 
     } 
     ], 
     "ticket_id": 72 
    } 
    } 

我需要從每個對象添加/刪除鍵即內部陣列。例如,我需要爲密鑰manual中的每個對象添加name密鑰。用於其他陣列的對象如nearest,auto。怎麼做才能做到這一點?

我試圖修改一個鍵,它改變了完整的對象。我怎麼能在這裏避免參考的東西?

+0

對於普通對象,「鍵」不能是對象,但與鍵(屬性)關聯的值可以是對象(或任何值類型)。爲什麼不'obj.data.manual [0] .name ='whatever''其中* obj *是對最外層對象的引用?你有什麼嘗試? – RobG

+0

@RobG如果我想將'obj.data.manual [0] .name'賦值給'obj.data.manual [0] .myname',然後刪除'obj.data.manual [0] .name',該怎麼辦?它不會刪除'obj.data.manual [0] .myyname'嗎? –

+0

你可以使用typeof obj.data.manual [0] .myyname,如果它是一個對象,那麼是的。 –

回答

0

你的意思是這樣的嗎?

說你的數據結構被稱爲cars

var cars = { 
    "status": 200, 
    "message": "Successful", 
    "data": { 
     "manual": [ 
     { 
      ... 

然後你可以在屬性manual下一個名爲name屬性添加到項目,如

cars.data.manual = cars.data.manual.map(i => Object.assign({name: 'My ' + i.vendor}, i)); 

同樣,以在不同的其他項目屬性。

可以

console.log(cars); 

事後驗證結果。