Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用lodash查找嵌套对象数组中的对象?_Javascript_Lodash - Fatal编程技术网

Javascript 如何使用lodash查找嵌套对象数组中的对象?

Javascript 如何使用lodash查找嵌套对象数组中的对象?,javascript,lodash,Javascript,Lodash,我有这个数据集 var records = [{ gc: '2', time: 1231232423, cards: [{ cardCode: '12121', rssi: 23 }, { cardCode: '12122', rssi: 33 }, { cardCode: '12421', rssi: 43 } ] },

我有这个数据集

var records = [{
    gc: '2',
    time: 1231232423,
    cards: [{
        cardCode: '12121',
        rssi: 23
      }, {
        cardCode: '12122',
        rssi: 33
      }, {
        cardCode: '12421',
        rssi: 43
      }

    ]
  },
  {
    gc: '3',
    time: 4331232233,
    cards: [{
        cardCode: '6423',
        rssi: 23
      }, {
        cardCode: '12421',
        rssi: 13
      }

    ]
  }, , {
    gc: '4',
    time: 4331232233,
    cards: [{
        cardCode: '8524',
        rssi: 03
      },
      {
        cardCode: '6423',
        rssi: 23
      }, {
        cardCode: '12421',
        rssi: 67
      }
    ]
  }
]
我有一个对象数组
(记录)
,每个对象中都有另一个数组
(卡片)
。这意味着如果“记录”中的对象中始终有
数组。因此,从一开始,我想迭代整个列表
记录
,并将所有对象的卡片数组相互比较,然后找到匹配对象的
rssi
值,并将该对象(具有最小rssi值)推到另一个新数组中。以同样的方式,在最后我想要一个数组,在这个数组中我有所有匹配的对象,这些对象具有最小的rssi值。我正在使用
lodash
,并且已经尝试过了

 matchedRecords =   records.forEach(record=>{
 record.cards.forEach(record=>{
  _.filter(records, _.flow(
    _.property('cards'),
     _.partialRight(_.some, { cardCode: record.cardCode })
         ));
      })
   })
我期望的结果是

 [
   {
    gc : 3, 
    cards : [{
     cardCode : '12421',
     rssi : 13
    }]
   }
 ]
注意:卡数组对象应在
cardCode键的基础上进行比较

已更新 本版本基于对问题的评论中经过长时间的需求讨论后达成的理解。它不使用lodash。它变得足够复杂,可能会被分解成更小的碎片,而洛达斯可能会对此有所帮助

它不仅包括原始记录中的
gc
,还包括原始记录中的
time
,事实上,它还包括原始记录中的任何其他内容。如果只需要
gc
,只需从代码中删除
…rest

constsharedcards=records=>
对象值(
Object.entries(records.reduce(
(a,{cards,…rest})=>cards.reduce(
(a,{cardCode,rssi})=>({
A.
[cardCode]:[…(a[cardCode]| |[]),{…rest,rssi}]
}),
A.
), 
{}
))
.filter(([code,rs])=>rs.length==records.length)
.reduce((a[代码,rs])=>{
常量{gc,rssi,…rest}=rs.reduce(
(r1,r2)=>r2.rssi
含Lodash

let records=[{“gc”:“2”,“time”:1231232423,“cards”:[{“cardCode”:“12121”,“rssi”:23},{“cardCode”:“12122”,“rssi”:33},{“cardCode”:“12421”,“rssi”:43}},{“gc”:“3”,“time”:433122233,“cards”:[{“cardCode”:“6423”,“rssi”:23},{“cardCode”:“12421”,“rssi”:13},{“gc”:“4”,“time”:4331233},{“cardCode”:“cards”:“cardCode,{“cardCode”:“12421”,“rssi”:67}]]
让映射=\减少(记录,(acc,rec)=>{
_.forEach(记录卡,(卡)=>{
card=\分配({},card,{gc:rec.gc,multiple:false})
if(acc中的card.cardCode){
设lc=acc[card.cardCode].rssi{
rec.cards=\.filter(rec.cards,(card)=>mapped[card.cardCode]。多个&mapped[card.cardCode]。gc===rec.gc)
记录卡长度和附件推送(记录)
返回acc
}, []);
console.log(结果)
。作为控制台包装器{
最大高度:100%!重要
}

卡码:'8524'
的rssi应为30?如果为3,则应为最小值。不,我必须遍历整个
记录
数组,并在每个卡数组中找到匹配的卡,并找到具有最小rssi的对象。在我的上述数据集中,具有
卡码
的对象等于
12421
存在于
记录的所有三个对象中,因此code应该返回具有最小rssi值的对象您知道只有一张匹配的卡吗?如果不知道,结果中的
gc:3
来自何处?一张卡的最低
rssi
可能位于与最低rss不同的记录中不,我不知道什么是匹配的卡片,因为卡片数组在
记录的每个对象中都是动态的,因为代码应该首先比较并获得匹配的记录,所以在我给定的数据集中,只有一个对象具有
cardCode
:“12421”存在。基本上,我想在
cardC的基础上匹配记录ode
您可以看到
12421
的对象存在于
记录中的所有三个对象中,通过比较每个对象的rssi,最小rssi为13,而
cardCode:12421
您的解决方案工作得很好,但它不能给出每个对象的gc内部结果。结果应该与第一个类似t格[{“gc”:“3”,卡片:[{“cardCode”:“12421”,“rssi”:“13}]},在第二格中,结果应该是[{“gc”:“2”,“cards”:[{“cardCode”:“6423”,“rssi”:“7}]},{“gc”:“3”,“cards”:[{“cardCode”:“12421”,“rssi”:“13}]}]@FahadHassanSubzwari:在得到全部要求之前,我写了你看到的版本。我甚至提到了tha