2017-07-14 102 views
0

我无法从嵌套数组中分配值。循环正确地移动并且看起来最初对以下数组进行比较。JavaScript比较,匹配和分配嵌套数组中的对象

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)); 

searchNameq.source比较在调试器中的破发点中的一个阶段,但我再次点击

q.source // 'EDW' to undefined 

我不知道为什么我看到它比较相同的值2次以及为什么第二次未定义q.source。它似乎像过滤器运行2次。

我试图与发现,以及,但出错了同样的结果在过滤器

let qualifierViolations = profilerNodes 
     .find(item => item.nodes) 
     .filter(value => value.source === smartSearch) 

当使用。有些我发现,一切都发生身体接触,但没有过滤

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或更大,这将决定用户是否最终保留或不。