【问题标题】:Find a value between spaces in a javascript string在 javascript 字符串中的空格之间查找值
【发布时间】:2014-12-23 14:50:15
【问题描述】:

我有一个字符串和一个数组:

var first = 'b c da e f a s';
var second = ["g","h","i","j","a"];

我需要在字符串中找到从数组中作为最后一个字符派生的“a”的第一次出现,所以我做到了:

var first = 'b c da e f a s';
var second = ["g","h","i","j","a"];

var myArray = second.reverse();
var arrayLength = myArray.length;
for (var i = 0; i < arrayLength; i++) {  
    var x = first.split(myArray[i])[1];

    if (typeof x !== 'undefined'){
    alert($.trim(myArray[i] + x))
    break;

    }

}

这会输出a e f,而它应该是a s。显然它拆分了单词da,但我只需要将它拆分为一个整数,所以它应该跳过da,除非我在寻找整个值da

Example at jsfiddle

【问题讨论】:

  • 您期望的输出是什么?不清楚
  • @Amit Joki 输出应该是“a s”
  • 你没有被空格分割。你被myArray[i]分开了。
  • @lolka_bolka 是的,我正在调查,但我无法弄清楚。我应该在数组中引入空格吗? (我没有成功)
  • 目前还不清楚这段代码应该做什么。你说输出应该是a s,但是为什么?

标签: javascript jquery arrays string split


【解决方案1】:

function find_remainders(first, second) {
  var words = first.split(' '); // Split up first by spaces
  var result = '';
  for (var i = second.length - 1; i >= 0; i--) { // Loop from the end of second until we succeed
    var search = second[i]; // Get the current element of second
    var index = words.indexOf(search); // Find that element
    if (index != -1) { // If it was found
      result = words.slice(index).join(' '); // Get it and everything after it, put back into a string
      break;
    }
  }
  return result;
}

alert(find_remainders('b c da e f a s', ["g", "h", "i", "j", "a"])); // a s
alert(find_remainders('b c da e f q s', ["g", "h", "f", "j", "a"])); // f q s

【讨论】:

  • 谢谢,但它应该循环到另一个数组值。所以如果没有找到“a”那么它应该寻找“j”等等,但我猜这是一个小的调整
  • 你在问题​​的什么地方这么说?当我这样做时,你会添加更多要求吗?
  • 为什么要循环输入示例代码?像这样获得“a”有更简单的方法
【解决方案2】:

输出是as 作为newArray 的值。如果需要字符串,可以将newArray 内爆。

用空格分割字符串。遍历数组,如果针在大海捞针中,则从该位置切片数组。

var needle = 'a';
var haystack = 'b c da e f a s';
var parts = haystack.split(" ");

for (i=0; i < parts.length; i++) {
    if (parts[i] === needle) {
        var newArray = parts.slice(i);
        break;
    }
}
console.log(newArray);

【讨论】:

  • 使用parts.offsetOf(needle)而不是循环?
  • TypeError: parts.offsetOf is not a function 给我。你能给我一个参考链接吗?
  • 糟糕,意思是indexOf
  • indexOf 不好,因为如果daa 之前就会发现。
  • 如果你在字符串上使用indexOf。我说的是在你split 之后在阵列上使用它。看我的回答。
【解决方案3】:

这是一种奇怪的处理方式,但如果你真的需要这样做,请将字符串拆分为 second 中每个字符串的全字版本:

var first = 'b c da e f a s';
var second = ["g", "h", "i", "j", "a"];

var myArray = second.reverse();
var arrayLength = myArray.length;
for (var i = 0; i < arrayLength; i++) {
  var x = first.split(new RegExp('\\b' + myArray[i] + '\\b'))[1];

  if (typeof x !== 'undefined') {
    alert($.trim(myArray[i] + x))
    break;
  }
}
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 我接受了 Barmar 的回答,因为看起来我可以进一步扩展它。但我喜欢简单的正则表达式插入,谢谢,不知道 +1
【解决方案4】:

您的代码按原样运行:

myArray (after reverse) -> ['a', 'j', 'i', 'h', 'g']
                             0    1    2    3    4
i = 0 -> myArray[i] -> 'a'

first.split('a')[1] -> ['b c d', ' e f ', 's'][1] -> ' e f ';
                           0       1       2
alert('a' + ' e f ') -> 'a e f'; 

然后你打破;并终止循环。

【讨论】:

    【解决方案5】:
    var first = 'b c da e f a s';
    var second = ["g","h","i","j","a"];
    var searchStr = second[second.length - 1];
    var firstArray = first.split(' ');
    for ( var i = 0; i < firstArray.length; i++) {
        if ( firstArray[i] === searchStr) {
            break;
        }
    }
    if (i < firstArray.length) {
        alert(firstArray.splice(i).join(' '));
    }
    

    【讨论】:

    • 非常感谢。我接受你的回答,因为它唯一的代码与我的非常相似,也是我唯一能理解的代码:)
    • 再想一想,我现在意识到这只是我的代码的简化版本,它不会遍历其他值,无论如何,谢谢
    • 你应该问更好的问题
    • 不只是这个(也许)
    猜你喜欢
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多