JavaScript在嵌套数组中比较,匹配和分配对象

时间:2017-07-14 10:11:10

标签: javascript arrays

我在嵌套数组中分配值时遇到问题。循环正在正确地移动并且看起来最初对以下数组进行比较。

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 = [        {           姓名:'客户',           节点:[              {来源:'媒体'},           ]        }     ]

1 个答案:

答案 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或更高,这将反过来决定订阅者是否最终被保留。