【问题标题】:loop through json object and check if URL ends in certain value循环遍历 json 对象并检查 URL 是否以某个值结尾
【发布时间】:2015-04-09 10:38:49
【问题描述】:
for(var j=0; j<product.image_groups[0].images.length; j++){
                          console.log("images in json" + product.image_groups[0].images[j].link)

                    }

product.image_groups[0].images[j].link 返回一个 URL,例如:

http://images.domain.com/is/image/domain/hbeu50274296_021_11
http://images.domain.com/is/image/domain/hbeu50274296_021_10
http://images.domain.com/is/image/domain/hbeu50274296_021_21

在循环中,我只想将以_21 结尾的 URL 保存到一个不确定如何执行此操作的变量中。我猜是用正则表达式,但究竟如何?

【问题讨论】:

  • 是的,您可以使用正则表达式

标签: javascript jquery regex


【解决方案1】:

使用string.match 函数。下面的匹配函数仅在字符串以_21 子字符串结尾时才会匹配该字符串。 $ 断言我们在一行的末尾。

for(var j=0; j<product.image_groups[0].images.length; j++){
    if (product.image_groups[0].images[j].link.match(/_21$/)) {
                          console.log("images in json" + product.image_groups[0].images[j].link)

                    }
}

使用regex.test函数。

for(var j=0; j<product.image_groups[0].images.length; j++){
    if (/_21$/.test(product.image_groups[0].images[j].link)) {
                          console.log("images in json" + product.image_groups[0].images[j].link)

                    }
}

示例:

var l = ["http://images.domain.com/is/image/domain/hbeu50274296_021_11","http://images.domain.com/is/image/domain/hbeu50274296_021_10","http://images.domain.com/is/image/domain/hbeu50274296_021_21"];
for (i=0;i<l.length;i++) {
  if(l[i].match(/_21$/)) {
    console.log(l[i])
  }
}

输出:

http://images.domain.com/is/image/domain/hbeu50274296_021_21

【讨论】:

  • 我认为你应该使用/_21$/.test(string) 而不是string.match(/_21$/)。它更快,测试返回一个布尔值。
【解决方案2】:

您可以根据给定要求将图像列表缩减为新列表。就我而言,最简单的检查方法是使用 indexOf 方法。

var images = product.image_groups[0].images;
var results = images.reduce(function (list, url) {
  if (url.indexOf('_21') === url.length - 3) {
    list.push(url);
  }

  return list;
}, []);

// use results here

【讨论】:

    【解决方案3】:

    您可以将网址拆分为_,然后检查最后一个值是否为21。像这样的:

    for (var j = 0; j < product.image_groups[0].images.length; j++) {
        var finalPart = product.image_groups[0].images[j].link.split('_').pop();
        if (finalPart == '21') {
            // do something...
        }
    }
    

    【讨论】:

    • 您将'21' 分配给finalPartif 中缺少一两个=
    【解决方案4】:

    试试吧,干净、简单、快速。

    var allImages = product.image_groups[0].images;
    
    for ( //make a for to get all images
        var j
        in allImages
    ) {
        if (allImages[j].link.slice(-2) == "21") { //check if last 2 characters are "21";
            console.log("images in json" + allImages[j].link);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多