我试图比较两个数组,一个名为values
,另一个名为feeds
。
feeds
数组有多组值,如何检查哪个Feed包含要匹配的正确值集?
小提琴链接:https://jsfiddle.net/v7ussmbb/1/
我理解异步性质,即循环完成之前的console.log规则,这很好,我只需要比较部分。
答案 0 :(得分:0)
我会迭代你的所有Feed,直到匹配所有规则,以实现我会做这样的事情: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
函数:
some()为每个元素执行一次回调函数 数组,直到找到一个回调返回truthy值的数组(a 转换为布尔值时变为true的值)。如果这样的话 找到element,some()立即返回true。否则,一些() 返回false。仅对数组的索引调用回调 分配了价值;对于已经存在的索引,不会调用它 已删除或从未分配过值。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some