[英]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.