2017-02-26 2 views
-2

Ich versuche, zwei Arrays zu vergleichen, eines heißt values und anderes feeds genannt. Das Array feeds verfügt über mehrere Werte. Wie kann ich überprüfen, welcher Feed die richtigen Werte enthält? Fiddle Link: https://jsfiddle.net/v7ussmbb/1/Vergleicht dynamisch zwei Arrays

Ich verstehe die asynchrone Natur, dh console.log Regeln vor der Schleife, die in Ordnung ist, brauche ich nur den Vergleichsteil.

Antwort

0

Ich würde alle Ihre Feeds laufen, bis man alle Regeln übereinstimmt, zu erreichen, dass ich so etwas tun würde: https://jsfiddle.net/canastro/v7ussmbb/4/

// Hold the active feed 
var active_feed = ''; 

// Iterate until one item matches all rules 
const found = feeds.some(function(item) { 
    //console.log('item: ', item); 

    // Check if all rules match 
    const match = item.rules.some(function(rule) { 

    // Get rule to apply by comparing values keys with the rule id 
    let ruleToApply; 
    Object.keys(values).some(function(key) { 
     const isRule = key === String(rule.id); 
     if (isRule) { ruleToApply = values[key]; } 
     return isRule; 
    }); 

    return ruleToApply === rule.value; 
    }); 

    if (match) { active_feed = item; } 

    return match; 
}); 

console.log('active_feed: ', active_feed); 

Um dies zu erreichen, habe ich some Funktion:

einige() führt die Callback-Funktion für jedes in vorhandene Array einmal aus, bis es eine Callback-Funktion findet, die einen truthigen Wert zurückgibt (ein Wert, der wahr wird, wenn er in einen Booleschen Wert konvertiert wird). Wenn ein solches Element gefunden wird, gibt einige() sofort True zurück. Andernfalls gibt einige() false zurück. Callback wird nur für Indizes des Arrays aufgerufen, denen Werte zugewiesen haben; Es wird nicht für Indizes aufgerufen, die gelöscht wurden oder denen nie Werte zugewiesen wurden.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

+0

Während es funktioniert, es vergleicht nur das erste Objekt in Regeln Array, https://jsfiddle.net/v7ussmbb/5/ – aman704

+0

Ops, du hast Recht. Es tut uns leid. Meine Antwort wurde aktualisiert. – Canastro

Verwandte Themen