【问题标题】:Removing JSON value that contains certain word in JavaScript删除包含 JavaScript 中特定单词的 JSON 值
【发布时间】:2018-10-11 02:30:46
【问题描述】:

我正在使用包含电视节目信息 JSON 文件的 large API

“姓名”键包含客人信息。他们中的大多数返回来宾列表,但有些返回为“剧集 [x]”。例如:

for (x in data){
 let title = data[x]._embedded.show.name;
 let guests = data[x].name;
 let airdate = data[x].airdate;

 switch(title){
   // ...
   case 'The Daily Show with Trevor Noah':
      p.innerHTML = airdate + " " + guests;
      noah.appendChild(p);
      console.log(airdate, guests);
      break;
   default:
      break;
 }
}

来宾值返回为:

凯文·杨、安托瓦内特·罗伯逊、迈克尔·海登将军、大卫·布莱恩,第 63 集、第 64 集、第 65 集

我想只显示名称,并以某种方式删除“Episode”的任何实例。我有一些想法,但我是 JavaScript 新手,遇到了一些麻烦。如果需要更多代码来回答这个问题,我会更新这个问题。提前致谢

【问题讨论】:

  • If code is necessary to answer this question, I'll update this with necessary information. 是的,如果您需要帮助调试它,请始终发布您尝试过的代码。
  • 当然,我刚刚更新了我的问题
  • 我认为 JSON 调用不会返回 switch(title){... 而是有效的 JSON。
  • 看看replace函数
  • @AmrAly 替换确实删除了“Episode”,但我想删除包含“Episode”的整个值。否则,剧集编号仍然存在。想知道是否有某种“包含”方法可以删除所有实例

标签: javascript html json regex parsing


【解决方案1】:

如果您只想打印标题中没有episode 的项目,您可以在switch() 之前添加if() 语句,如果您来的话,然后使用continue 语句跳过一个无效项目(continue 将告诉 Javascript 基本上跳到下一个项目)。

for (x in data){
  let title = data[x]._embedded.show.name;
  let guests = data[x].name;
  let airdate = data[x].airdate;

  if (guests.substr(0, 7) === 'Episode') continue;
  // if the title starts with "Episode", no code after this line will be run for this item

  switch(title){
    // ...
    case 'The Daily Show with Trevor Noah':
      p.innerHTML = airdate + " " + guests;
      noah.appendChild(p);
      console.log(airdate, guests);
    break;
    default:
    break;
  }
}

【讨论】:

  • 谢谢!这非常有效。 if 语句应该以“guests”而不是“title”开头,但这确实有效。
【解决方案2】:

使用正则表达式怎么样?

var pattern = /(,\s)?Episode\s\d+((,\s)?)/g;
var guests = data[x].name.replace(pattern, "");

测试用例:

var str1 = "Kevin Young, Antoinette Robertson, Gen. Michael Hayden, David Blaine, Episode 63, Episode 64, Episode 65"; 
var str2 = "Episode 63, Episode 64, Episode 65, Kevin Young, Antoinette Robertson, Gen. Michael Hayden, David Blaine"; 
var str3 = "Kevin Young, Antoinette Robertson, Gen. Michael Hayden, David Blaine";
var str4 = "Episode 63, Episode 64, Antoinette Robertson, Episode 65";
var str5 = "Episode 63, Episode 64, Episode 65";
var str6 = "Episode 63";

【讨论】:

    【解决方案3】:

    您可以像这样替换Episode [0-9] 的所有实例:

    var str = "Kevin Young, Antoinette Robertson, Gen. Michael Hayden, David Blaine, Episode 63, Episode 64, Episode 65";
    
    var newStr = str.replace(/,[ ]?Episode[ ]?[0-9]+/g, '');
    
    console.log(newStr);
    
    // Kevin Young, Antoinette Robertson, Gen. Michael Hayden, David Blaine

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多