【问题标题】:Accessing records from a JSON and adding or deleting information从 JSON 访问记录并添加或删除信息
【发布时间】:2016-04-24 20:17:56
【问题描述】:

我是 Javascript 新手,所以这可能相当容易。

我有这个 JSON:

var collection = {
    2548: {
      album: "Slippery When Wet",
      artist: "Bon Jovi",
      tracks: [ 
        "Let It Rock", 
        "You Give Love a Bad Name" 
      ]
    },
    2468: {
      album: "1999",
      artist: "Prince",
      tracks: [ 
        "1999", 
        "Little Red Corvette" 
      ]
    },
    1245: {
      artist: "Robert Palmer",
      tracks: [ ]
    },
    5439: {
      album: "ABBA Gold"
    }
};

还有这个功能:

// Keep a copy of the collection for tests
var collectionCopy = JSON.parse(JSON.stringify(collection));

function updateRecords(id, prop, value) {
  if (value !== "" && prop !== "tracks"){
    return collection.id.prop.value;
  } else if (value !== "" && prop === "tracks"){
    return collection.id.prop.push(value);
  } else {
    delete collection.id.prop.value;
  }

  return collection;
}

这些是我的测试:

updateRecords(5439, "艺术家", "ABBA");

updateRecords(2548, "艺术家", "");

updateRecords(1245, "tracks", "沉迷于爱情");

updateRecords(2458, "tracks", "");

我需要做的是编写一个函数,该函数将访问JSON 信息并在参数value 为非空白(value !== "")且prop 参数不是tracks 时添加信息( props !== "tracks) 更新或设置参数 prop 的值。

此外,如果参数 prop 是轨道 (props === "tracks") 并且参数 value 也是非空白 (value !== "") 我需要将值推到 tracks 内部的末尾JSON 文件。

我的问题是我该怎么做呢?我的显然失败了我知道我需要deletepush 的信息,但是访问正确的数据让我感到困惑,我会做类似的事情:return collection.id.prop.push(value);

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    请注意,您在代码中使用了collection.id.prop.value。这意味着它不会解析点之后的变量,因为a.b is equivalent to a["b"]

    这意味着您正在尝试访问 collection 上一个名为 id 的属性,依此类推。

    您应该改用collections[id][prop].value

    var collectionCopy = JSON.parse(JSON.stringify(collection));
    
    function updateRecords(id, prop, value) {
      if (value !== "" && prop !== "tracks"){
        return collection[id][prop].value;
      } else if (value !== "" && prop === "tracks"){
        return collection[id][prop].push(value);
      } else {
        delete collection[id][prop].value;
      }
    
      return collection;
    }
    

    【讨论】:

      【解决方案2】:

      您应该使用点表示法来访问没有空格的元素,如果有的话,应该使用括号表示法。由于您不知道“prop”是否在此处包含空格,因此最好使用括号表示法。

      如果您有任何问题,请告诉我。

      给定以下数据:

      // Setup
      var collection = {
          2548: {
            album: "Slippery When Wet",
            artist: "Bon Jovi",
            tracks: [ 
              "Let It Rock", 
              "You Give Love a Bad Name" 
            ]
          },
          2468: {
            album: "1999",
            artist: "Prince",
            tracks: [ 
              "1999", 
              "Little Red Corvette" 
            ]
          },
          1245: {
            artist: "Robert Palmer",
            tracks: [ ]
          },
          5439: {
            album: "ABBA Gold"
          }
      };
      
      // Keep a copy of the collection for tests
      var collectionCopy = JSON.parse(JSON.stringify(collection));
      
      // Only change code below this line
      function updateRecords(id, prop, value) {
        if((value !== "") && (prop !== "tracks")) {
          console.log("Updating or setting property: ", prop);
          console.log("setting property to: ", value);
          collection[id][prop] = value;
        }
        else if((value !== "") && (prop === "tracks")) {
          collection[id].tracks.push(value);
        }
        else if(value === "") {
          delete collection[id][prop];
        }
      
        return collection;
      }
      
      updateRecords(5439, "artist", "ABBA");
      

      【讨论】:

      • 不鼓励仅使用代码的答案:虽然最初的提问者可能理解,但在未来的某个时间其他人可能需要澄清,但这个问题太老了,不值得问。
      • 问题不在于空间与否,而是something.prop 等价于something["prop"],而不是something[prop]
      • 好的,为什么if/else if's 在双括号中?
      • 好问题。将 if 项组合在一起更容易阅读。看到这个线程:stackoverflow.com/questions/22227248/…
      • 刷新页面。不得不编辑并添加它。在平板电脑上:)
      猜你喜欢
      • 2018-11-13
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      相关资源
      最近更新 更多