我在嵌套数组中分配值时遇到问题。循环正在正确地移动并且看起来最初对以下数组进行比较。
let searchSource = [ 'media', 'arts'];
let subscriberNodes = [
{
name: 'customer',
nodes: [
{source: 'media'},
]
}
]
不幸的是,使用下面的代码,我没有过滤数据。
let violation = subscriberNodes
.filter( v => v.nodes = v.nodes.filter(q => searchSource === q.source) );
searchName 和 q.source 在调试器的断点的一个阶段进行比较,但是当我再次点击时
q.source // 'EDW' to undefined
我不确定为什么我看到它比较相同的值2次以及为什么第二次 q.source 未定义。过滤器似乎运行了2次。
我尝试使用此功能,但在过滤器上出错了相同的结果
let qualifierViolations = profilerNodes
.find(item => item.nodes)
.filter(value => value.source === smartSearch)
使用 .some 时,我发现所有内容都被触及但没有过滤
let qualifierViolations = subscriberNodes
.filter( v => v.nodes.some(q => searchSource !== q.source) );
此时我不知道我错过了什么或如何解决它。任何见解将不胜感激。
让subscriberNodes = [ { 姓名:'客户', 节点:[ {来源:'媒体'}, ] } ]
答案 0 :(得分:1)
我不确定您要过滤掉哪些内容,但如果您只想保留拥有{source: 'media'}
或{source: 'arts'}
的用户,请按以下步骤操作它:
let searchSouce = ['media', 'arts'];
let subscriberNodes = [{
name: 'customer1',
nodes: [{
source: 'media'
}]
},
{
name: 'customer2',
nodes: [{
source: 'arts'
}, {
source: 'something'
}]
},
{
name: 'customer3',
nodes: [{
source: 'something else'
}]
}
]
let violation = subscriberNodes.filter(subscriber =>
subscriber.nodes.filter(node => searchSouce.indexOf(node.source) !== -1).length
);
console.log(violation) // Keeps only customer 1 and 2

nodes.filter
将保留包含{source: 'media'}
或{source: 'arts'}
的节点。因此,获取已过滤的.length
将返回0
或更高,这将反过来决定订阅者是否最终被保留。