2017-02-26 86 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