2016-05-14 10 views
1

ich ein Array in Javascript, haben mit "aassd, v_value1, asadds, v_value2, asddasd ...", und ich brauche, um die Werte zu extrahieren, die mit v_ in a beginnen neues ArraySuchen und Extrahieren von Zeichenfolge in JavaScript-Array

Ich habe die nächste Funktion verwendet, um die Werte zu erhalten, aber nur den ersten Wert erhalten.

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_') 

Danke.

+2

'Rückkehr arr;' bricht die Schleife. – micmia

+0

Aber warum benutzt du nicht [** 'Array # filter' **] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)? – Leo

Antwort

2

sollten Sie verwenden .filter() Methode wie folgt:

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

Die filter() Methode gibt Elemente des Arrays, die die Bedingung in der Callback-Funktion erfüllt

+1

Match würde auch Werte wie dieses asdasdv_asdas zurückgeben ... was nicht die Frage ist. Ist es nicht? – cafebabe1991

+0

Einverstanden. Lass mich das beheben –

+1

@ cafebabe1991 Jetzt wird es nur den Start in Betracht ziehen –

0

ich unten denken funktionieren könnte. Streichen Sie einfach die Übereinstimmung und drücken Sie auf ein neues Array, wenn Sie gefunden werden.

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);

+0

Index von sollte nicht verwendet werden, da es Werte wie "asdasdv_asdasd" auch zurückgeben wird, was falsch ist. – cafebabe1991

+0

Ich habe gerade den Code in das Snippet-Tool und es funktioniert gut. Was meinst du, Index sollte nicht verwendet werden? –

+0

Ich meinte Code funktioniert gut, aber versuchen Sie, diese Elemente in das Array "ararav_asasd". Jetzt ist v_ und so wird Index größer als -1, daher wird es in das Array gesetzt, aber es sollte nicht sein, da es nicht mit dem Muster startet, wie in der Frage – cafebabe1991

0
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; 
    } 

Die Fehler

  1. Verwenden MATCH nicht für sie Werte mit dem Muster überall in der Zeichenfolge zurück. Verwenden starts statt
  2. Return außerhalb der Schleife, wie es endet die Schleife, wenn es das erste Mal übereinstimmt und daher erhalten Sie nur das erste Element
  3. Sie sollten den Wert den Index nicht schieben, wie in der Frage gestellt . Tun Sie dies arr.push(array[i])
+0

'startsWith' gefragt ist in nicht verfügbar ES5. –

+0

Ich stimme Ihnen zu, aber das Problem ist Version Agnostiker, aber danke, dass Sie mir dieses Ding gezeigt haben. Ich habe gerade die Spezifikation nach deinem Kommentar gelesen :-) – cafebabe1991

Verwandte Themen