Javascript. Optimal way to join 2 sets of objects like in SQL?

前端 未结 3 1676
不思量自难忘°
不思量自难忘° 2021-01-13 20:37

Let\'s assume that we have 2 sets of objects

set1 = [{\'id\':\'1\', \'x\':\'1\', \'y\':\'2\'}, {\'id\':\'2\', \'x\':\'2\', \'y\':\'2\'}]
set2 = [{\'id\':\'1         


        
3条回答
  •  长情又很酷
    2021-01-13 21:06

    Another option using Ramda:

    const r = require('ramda')
    const outerJoin = r.curry(function(relationName, set1, keyName1, set2, keyName2) {
        const processRecord = function(record1) {
            const key1 = record1[keyName1]
            const findIn2 = r.find(r.propEq(keyName2, key1))
            const record2 = findIn2(set2)
            record1[relationName] = record2
            return record1
        }
        return r.map(processRecord, set1)
    })
    

    assumptions

      //set1 is an array of objects
      set1 : [{}]
      //set1 has a property for the key of type T
      set1[keyName1] : T
      //set2 is an array of objects
      set2 : [{}]
      //set2 has a property for the key which is also of type T
      set2[keyName2] : T
    

    Output

     [{
         ...set1 members...
         , relationName: ...set2 members...
      }]
    

    I guess a better output might be (shouldn't be hard to get here):

     [{
         , leftObj:...set1 members...
         , rightObj: ...set2 members...
      }]
    

    and add support for inner joins. But I was replacing some crappy code and needed to replicate the object hierarchy.

提交回复
热议问题