簡體   English   中英

我想將兩個Javascript數組與Lodash結合使用(而不是concat)

[英]I want to combine two Javascript Array with Lodash (not concat)

我有如下兩個數組

  const registers = [{ user: 'Allen', type: 'phone' }, { user: 'Eric', type: 'email' }];
  const dates = ['20171225', '20180914'];

我希望他們像這樣

const result = [
  { user: 'Allen', type: 'phone', date: '20171225' }
  { user: 'Allen', type: 'phone', date: '20180914' }
  { user: 'Eric', type: 'email', date: '20171225' }
  { user: 'Eric', type: 'email', date: '20180914' }
];

我認為在這種情況下可以使用Lodash的適當功能,但我自己找不到。 有沒有很酷的怪胎可以幫助擺脫這個地獄。 謝謝〜

我同意使用插件,而不是重寫人們提供的內容。 但是,簡單來說,使用插件會使事情變得復雜,最好在有插件的情況下使用簡單的解決方案。

 const registers = [{ user: 'Allen', type: 'phone', }, { user: 'Eric', type: 'email', }]; const dates = [ '20171225', '20180914', ]; const arr = registers.reduce((tmp, x) => [ ...tmp, ...dates.map(y => ({ ...x, date: y, })), ], []); console.log(arr); 

一種方法是用reduce + forEach,但是任何雙循環都應該起作用。

 const registers = [{ user: 'Allen', type: 'phone' }, { user: 'Eric', type: 'email' }]; const dates = ['20171225', '20180914']; let answer = registers.reduce((acc, n) => { dates.forEach(x => { acc.push({user: n.user, type: n.type, date: x}); }); return acc; }, []) console.log(answer); 

在這種情況下,使用lodash不會減少太多代碼(您可以簡單地_.map(a, ...)的調用替換為a.map(...) )。 但是好吧,這里是:

 const registers = [{ user: 'Allen', type: 'phone' }, { user: 'Eric', type: 'email' }]; const dates = ['20171225', '20180914']; const result = _.map(registers, ({ user, type }) => _.map(dates, (date) => ({ user, type, date }))); console.log(result); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.core.js"></script> 

正如OP所述使用lodash,這是一個解決方案

Lodash變體

 var registers = [{ user: 'Allen', type: 'phone' }, { user: 'Eric', type: 'email' }]; var dates = ['20171225', '20180914']; let result = _.map(registers, function(value, index, _source){ return _.extend(value, { date: (dates[index] || null)}); }); console.log(result); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.core.min.js"></script> 

香草JS變體

 var registers = [{ user: 'Allen', type: 'phone' }, { user: 'Eric', type: 'email' }]; var dates = ['20171225', '20180914']; let result = registers.map(function(value, index, _source){ return Object.assign(value, { date: (dates[index] || null)}); }); console.log(result); 

更新的答案

 var registers = [{ user: 'Allen', type: 'phone' }, { user: 'Eric', type: 'email' }]; var dates = ['20171225', '20180914']; const result = _.flatten(_.map(registers, function(value, index, _source){ return _.map(dates, (v, i, _s) => _.extend(value, { date: v})); })); console.log(result); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.core.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM