簡體   English   中英

如何使用JSON.parse的reviver函數向數組中的每個對象添加數據?

[英]How do I use `JSON.parse`'s reviver function to add data to each object in an array?

假設我將以下JSON對象保存在這樣的變量中:

var musicList = {
  "files": [
        {
          "title": "Ironic"
        },
        {
          "title": "It's Beginning To Look A Lot Like Christmas"
        },
        {
          "title": "Sweet Dreams"
        }
      ] 
};

這是一個學習練習,我們將這個JSON對象轉換為字符串,然后再次將其解析回一個對象...

console.log(musicList); // prints the object in the musicList variable
var stringifiedMusic = JSON.stringify(musicList);
console.log(stringifiedMusic); // prints the string version of the musicList object

但是我沒有期望得到想要的結果,這是使用files鍵將簡單的遞增ID號添加到數組中的每個對象。 我相信我沒有正確編寫Reviver功能...

var parsedMusic = JSON.parse(stringifiedMusic, function(key, value) {
  var idIncrementor = 0;
  var incrementorObject = [
    {id: idIncrementor}
  ];

  if (key === 'files') {
    idIncrementor++;
    return value.map(function (item, index) {
      return Object.assign({}, item, incrementorObject[index]);
    });
  }
  return value;
});

現在,這似乎只是將id: 0鍵值對添加到第一個對象,而不是其他對象。 這必須是因為if (key === 'files')...語句僅一次為true。 如果只有keyvalue參數傳入函數,我將在if語句中檢查對數組中的三個對象是否正確的內容?

您無需創建新對象。 如果正確使用map函數,將返回一個新數組(帶有新對象)。 您可以使用map提供的索引來獲取您的ID。

DEMO

var musicList = {
  "files": [
        {
          "title": "Ironic"
        },
        {
          "title": "It's Beginning To Look A Lot Like Christmas"
        },
        {
          "title": "Sweet Dreams"
        }
      ] 
};

var stringifiedMusic = JSON.stringify(musicList);

var parsedMusic = JSON.parse(stringifiedMusic, function(key, value) {

  if (key === 'files') {
    return value.map(function (item, index) {
      item.id = index;
      return item;
    });
  }
  return value;
});

console.log("parsedMusic", parsedMusic)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM