объединить 3 массива и соединить поле в lodash - PullRequest
0 голосов
/ 28 октября 2018

Пожалуйста, помогите мне, я хочу объединить разностные массивы 3 с полем _id .Мои массивы такие.Я пытаюсь объединить весь массив с помощью _id , но все еще работаю неправильно, и я понятия не имею, пожалуйста.

//array 1
let  inventory =[ 
 { _id: '0001',
   itemId: '0001',
   onHandQty:  70,
   avgCost: 9,
   balanceAmount: 630,
 },
 { _id: '0002',
   itemId: '0002',
   onHandQty: 70,
   avgCost: 5,
   balanceAmount: 350,
 }
]
//array 2
let  po =[
 {
   _id : "0002",    
   onHandPO : 10
 },
 {
   _id : "0001",    
   onHandPO : 20
 }
]

//array 3
let  so =[
 {     
  _id: "0001",  
  onHandSO: 2
 },
 {
  _id: "0003",  
  onHandSO: 1
 }
]

Я хочу, чтобы все массивы, соединенные _id, стали одним массивом, подобным этому.Этот результат мне нужен.

let  inventory =[ 
 { _id: '0001',
   itemId: '0001',
   onHandQty:  70,
   avgCost: 9,
   balanceAmount: 630,
   onHandPO : 20,
   onHandSO: 2
 },
 { _id: '0002',
   itemId: '0002',
   onHandQty: 70,
   avgCost: 5,
   balanceAmount: 350,
   onHandPO : 10
 },
 { _id: '0003',
   itemId: '0002',
   onHandQty: 0,
   avgCost: 0,
   balanceAmount: 0,
   onHandPO : 0
   onHandSO: 1
 }
]

1 Ответ

0 голосов
/ 28 октября 2018

Вы можете выровнять весь массив, сгруппировать их по общему значению и назначить все значения одному объекту.Тогда получите результат.

var inventory = [{ _id: '0001', itemId: '0001', onHandQty: 70, avgCost: 9, balanceAmount: 630 }, { _id: '0002', itemId: '0002', onHandQty: 70, avgCost: 5, balanceAmount: 350 }],
    po = [{ _id: "0002", onHandPO: 10 }, { _id: "0001", onHandPO: 20 }],
    so = [{ _id: "0001", onHandSO: 2 }, { _id: "0003", onHandSO: 1 }],
    result = _([inventory, po, so])
        .flatten()
        .groupBy('_id')
        .map(values => _.assign({}, ...values))
        .value();

console.log(_.sumBy(result, 'onHandSO')); // total of onHandSO 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
...