【问题标题】:Search and extract string in javascript array [duplicate]在javascript数组中搜索和提取字符串[重复]
【发布时间】:2016-05-14 15:03:53
【问题描述】:

我在 javascript 中有一个包含“aassd,v_value1,asadds,v_value2, asddasd...”的数组,我需要提取以 v_ 在一个新数组中。

我使用下一个函数来获取值,但只获取第一个值。

function search (array,string) {

    var arr= [];

    for (var i=0; i<array.length; i++) {
        if (array[i].match(string)){

          arr.push(i)

          return arr;
        }  
    }
      return -1;
  }

 search(array,'v_')

谢谢。

【问题讨论】:

  • return arr; 打破循环。
  • 但是你为什么不用Array#filter呢?

标签: javascript arrays


【解决方案1】:

你应该使用.filter()方法如下:

function search (array,string) {
  return array.filter(function (val) {
    return val.substr(0, string.length) === string;
  });
}

filter()方法返回满足回调函数条件的数组项

【讨论】:

  • Match 也会返回像这样的值 asdasdv_asdas this... 这不是问题所要求的。不是吗?
  • 同意。让我解决这个问题
  • @cafebabe1991 现在只考虑开始
  • 你有我的 +1 :-)
【解决方案2】:

我认为下面可能会起作用。如果找到,只需字符串匹配并推送到新数组。

var arr = ['aassd','v_value1','asadds','v_value2','asddasd'];
var newArr = []


substring = "v_";

for (var i = 0; i < arr.length; i++) {
    if (arr[i].search(substring) === 0) {
      newArr.push(arr[i]);
    }
}

alert(newArr);

【讨论】:

  • index of 不应该被使用,因为它会返回像 "asdasdv_asdasd" 这样的值,这也是错误的。
  • 我刚刚将代码放到了 sn-p 工具中,它工作正常。你的意思是不应该使用索引?
  • 我的意思是代码确实可以正常工作,但请尝试将这些项目放入数组“ararav_asasd”中。现在 v_ 确实存在,因此索引将大于 -1 ,因此它将被放入数组中,但它不应该是因为它没有“开始”问题中提出的模式
【解决方案3】:
function search (array,string) {

    var arr= [];

    for (var i=0; i<array.length; i++) {
        //Do not use MATCH here as you need values that STARTS WITH "v_", match will give you values like this asdasdav_asdasda also.
        if (array[i].startsWith(string)){
          //instead of this 
          //arr.push(i)
          //use this , the above will push the index, this will push the VALUE(as asked in the question)
          arr.push(array[i])

          //remove this: as this breaks on the first true condition , hence you get one value.
          //return arr;
        }  
    }
      return arr;
  }

错误

  1. 不要使用 MATCH,因为它会在字符串中的任何位置返回带有模式的值。 改用startsWith
  2. 返回循环外,因为它在第一次匹配时结束循环,因此您只会得到第一项
  3. 您应该推送值而不是问题中所要求的索引。所以这样做arr.push(array[i])

【讨论】:

  • startsWith 在 ES5 中不可用。
  • 我同意你的观点,但问题与版本无关,但感谢您向我指出这件事。我刚刚在您发表评论后阅读了规范:-)
猜你喜欢
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 2013-10-27
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 2018-10-18
  • 1970-01-01
相关资源
最近更新 更多