【问题标题】:JS: How to check if the JSON contains a specific valueJS:如何检查 JSON 是否包含特定值
【发布时间】:2016-07-08 09:36:53
【问题描述】:

问题

我正在处理一个包含多个事件(名称和日期)的数组,每个事件我必须在 SVG 中创建一个点。

对于每个新日期 X = X + 5。 对于同一日期的每个事件 Y = Y + 5。

例如:

事件 1:日期 = 1970 X = 10 & Y = 10

事件 2:日期 = 1970 X = 10 & Y = 15

如果绘制了一个点,我将位置保存在 JSON 中。我现在如何验证 JSON 中是否存在该职位?

我尝试了什么

    var var events = [{TITLE:"event 1", DATE:"1970"},
                      {TITLE:"event 2", DATE:"1970"},
                      {TITLE:"event 3", DATE:"1970"}];
    var pos_reserved = [];
    var X = 10;
    var Y = 10;
    if (pos_reserved.X != X && pos_reserved.Y != Y){
      Y = 30;
    }
    else if (pos_reserved.X == X && pos_reserved.Y == Y)
    {
      Y = 10;
    }
    else {}
    pos_reserved.push({"X": X,"Y": Y});
    create_point(X, Y);

【问题讨论】:

  • 你有你的示例 JSON 吗? (请编辑您的问题)
  • 欢迎来到 SO。请访问help center 了解如何询问以及询问什么。在这种情况下,用完整的示例更新您的问题并显示预期和实际输出 - 例如什么是 standard_X
  • 请注意:JSON 是文本数据交换格式,必须先对其进行解析才能使用。 pos_reserved 是一个数组而不是一个对象,所以 pos_reserved.X 看起来不对。
  • 该代码毫无意义。您没有在任何地方使用 JSON?

标签: javascript jquery arrays json validation


【解决方案1】:

我不确定我是否完全理解您的问题,但无论如何我都会尽力帮助您...

在我看来,一种可能性是将数据保存在对象 pos_reserved 中并执行类似的操作

var pos_reserved = {};

// returns if a position is already reserved or not
function isReserved(x, y){
  if (!pos_reserved[x])
    return false;
  
  if (!pos_reserved[x][y])
    return false;
  
  return true;
}

// reserve a position
function reservePosition(x, y, someInfo){
  // only reserve position if it's not already reserved
  if (!isReserved(x, y)){
    // check if you already have points with this x
    if (!pos_reserved[x]){
      // create one if needed
      pos_reserved[x] = {};
    }
  
    // save the point
    pos_reserved[x][y] = someInfo;
  }
  else{
    // dosomething...
  }
}

就是这样...我认为这是最好的解决方案,因为您的 JSON 对象就像一个矩阵...所以您可以轻松访问您之前保存的每个点...

我添加了“someValue”以向您展示您可以保存有关这一点的信息。你可以给一个名字或任何你想要的......这取决于你,但你不必随意使用它;)

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

罗曼

【讨论】:

  • 啊哈,不客气;)不要犹豫,点击向上箭头说答案很有用;)祝您有美好的一天!
  • 我有 :) 看起来它不算数,因为我没有足够的声誉喷气机。
  • pos_reserved.indexOf({"X": X,"Y": Y}) 永远找不到元素,因为您使用{"X": X,"Y": Y} 创建了一个新元素,而这个新元素不能存在于pos_reserved 中。而且它不是 JSON 对象。 JSON 只是用于交换的数据的文本表示。
  • mhhhh 你是对的......我将删除这部分答案。但是我仍然相信第二个解决方案的方法^^感谢您的评论;)
【解决方案2】:

我不确定我是否理解确切的问题,但我会回答标题。

UnderscoreJS是你最好的朋友!

_.find(events, {DATE: "1970"})
//returns 1st object that matches the year: Object {TITLE: "event 1", DATE: "1970"}

_.filter(events, {DATE: "1970"}).length
//returns the number of objects with that year: 3

【讨论】:

    猜你喜欢
    • 2018-02-13
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 2015-06-24
    • 2021-09-22
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    相关资源
    最近更新 更多