2016-10-09 1 views
1

Hi Ich versuche, einen Index für eine Zahl in Prozent und Integer-Array zu finden. Sagen Sie arraynum = ['10%','250','20%','500'] und Benutzer sendet einen Wert 15%, in welchem ​​Bereich befindet sich diese Nummer? Ich könnte Index für eine ganze Zahl finde diesen Code mitIndex eines Array basierend auf einer Mischung von Werten (Integer, String) oder (Integer, Float) zurückgeben

function test(number, ranges) { 
    for (var i = 0; i < ranges.length; ++i) { 
    if (number < ranges[i]) { 
     return i; 
    } 
    } 
} 


var ranges = [2000, 4000, 6000, 999999]; 

console.log(test(1710, ranges)); 

Jetzt habe ich Mischung aus integer und prozentualen Wert in einem Array und die Anzahl, die ein Benutzer auf diese Funktion übergeben kann eine ganze Zahl, dezimal oder Prozentsatz sein, wie In welchem ​​Index befindet sich die angegebene Zahl? Soll ich den gesamten Wert im Mix-Array in ein Format umwandeln? Wie macht man das? Kann mir bitte jemand dabei helfen? Danke im Voraus.

+0

Warum machst du diese 'Nummer

+0

Ich muss zwei Schritte tun, wie eine Zahl mit gegebenem Array vergleichen, wenn nicht in welchem ​​Bereich die Zahl gefunden wird, und es Index erhalten. @RaxWeber – Anu

+0

irgendwelche Grenzen für Bereiche? (Obergrenze, Untergrenze) – Aravind

Antwort

0

Überprüfung Bedingung für Mischung von Werten mit einem einzigen Eingang ist etwas schwierig, und Sie müssen für JSON-Array gehen. Bitte führen

var array_of_elements = [{ 
 

 
    "Price": 250, 
 
    "Percentage": "10" 
 
}, { 
 
    "Price": 500, 
 
    "Percentage": "25" 
 
}, { 
 
    "Price": 750, 
 
    "Percentage": "50" 
 
}, { 
 
    "Price": 1000, 
 
    "Percentage": "75" 
 
}]; 
 

 
function test(number_or_percent, array) { 
 

 
    for (var i = 0; i < array.length; ++i) { 
 
    if (number_or_percent.charAt(number_or_percent.length - 1) == "%") { 
 

 
     if (parseInt(array[i].Percentage) > parseInt(number_or_percent.slice(0, ((number_or_percent.length) - 1)))) { 
 
     return i; 
 
     } 
 
    } else { 
 
     if (array[i].Price > parseInt(number_or_percent)) { 
 

 
     return i; 
 
     } 
 
    } 
 
    } 
 
} 
 
console.log(test('100', array_of_elements)); 
 
console.log(test('30%', array_of_elements));

Ist das, was Sie wollen?

1

Verwenden Sie parseFloat(), um den Gleitkommawert einer Zeichenfolge abzurufen. Sie können die Tatsache verwenden, dass es nur bis zum ersten nicht numerischen Zeichen in der Zeichenfolge analysiert, um die % zu ignorieren.

Hier ist eine Implementierung mit Array#findIndex von ES6.

function test(number, ranges) { 
    var num = parseFloat(number); 
    return ranges.findIndex(function(element) { 
     return num === parseFloat(element); 
    }); 
} 
+0

Ich würde mit findIndex vorsichtig sein, wenn Sie kein Polyfill verwenden, da es in Browsern noch nicht sehr gut unterstützt wird. Vielleicht ist es besser, die [odash version: https://lodash.com/docs/4.16.4#findIndex – thesublimeobject

+0

@ thesublineobject Richtig zu verwenden, der Großteil meiner Antwort ist nur 'parseFloat'. Sie können tun, was sie wollen, um den Index zu finden. Ihre Schleife wäre in Ordnung. – 4castle

+0

oh sicher. Kein Problem mit der Antwort überhaupt. Ich wollte nur darauf hinweisen, dass sie es nicht bemerkt haben. – thesublimeobject

1

Sie könnten wie Ihr Code neu strukturieren so

arraynum = ['10%','250','20%','500']; 
function test(value, arr) { 
    return arr.indexOf(value.toString()); 
} 

test("10%", arraynum); // 0 
test("500", arraynum); // 3 
+0

Gibt dies mir Index für Dezimal, Integer und Prozentwerte? @Damilola – Anu

+0

Ja, ich glaube, es sollte Ihnen den ersten übereinstimmenden Index für ganzzahlige oder prozentuale Werte geben. Es sollte agnostic des ursprünglichen Werttyps seit sein Der Wert wurde in eine Zeichenfolge umgewandelt – Damilola

+0

Ich habe versucht, und ich bekomme -1. Können Sie bitte meine Änderungen in meiner Frage. @Damilola – Anu