2017-02-26 187 views
-2

我試圖比較兩個陣列,一個叫values,另一個叫feedsfeeds數組有多組值,我如何檢查哪個提要包含正確的匹配值集合? 小提琴鏈接:https://jsfiddle.net/v7ussmbb/1/動態比較兩個陣列

我明白了異步的本質,即console.log規則之前循環完成這很好,我只需要比較部分。

回答

0

我會遍歷所有資訊,直到一個所有的規則相匹配,實現我會做這樣的事情: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); 

要做到這一點我用some功能:

一些()針對數組中存在的每個元素執行一次回調函數,直到找到回調函數返回真實值( 值在轉換爲布爾值時變爲true)爲止。如果找到這樣一個 元素,some()立即返回true。否則,一些() 返回false。僅對 已分配值的數組的索引調用回調;它不被調用的索引已被刪除或從未被賦值的 。

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

+0

雖然它的工作原理,它只有第一個對象數組的規則比較,https://jsfiddle.net/v7ussmbb/5/ – aman704

+0

行動,你說得對。抱歉。更新了我的答案。 – Canastro