Dou*_*ell 3 javascript linq arrays join left-join
我试图将日期和值数组连接到日期数组,而不过滤掉额外的日期。这里的LinqJS 参考对于我实际如何使用连接来说非常令人困惑。这里的问题也没有多大帮助。
编辑:
在此处加入文档:https://svschmidt.github.io/linqjs/Collection.html#Join
看来我需要帮助来解决如何使连接成为连接outer而不是inner连接,因此它包含空/未定义值。
假设我有两个数组:
数组1:
[
'2017-02-10',
'2017-02-11',
'2017-02-12',
'2017-02-13',
'2017-02-20',
'2017-02-21',
'2017-02-22',
'2017-02-23',
'2017-02-24',
'2017-02-25',
'2017-02-26',
'2017-02-27'
]
Run Code Online (Sandbox Code Playgroud)
数组2:
[
{ date: '2017-02-10', value: 5 },
{ date: '2017-02-12', value: 8 },
{ date: '2017-02-13', value: 13 },
{ date: '2017-02-21', value: 14 },
{ date: '2017-02-24', value: 11 },
{ date: '2017-02-27', value: 7 }
]
Run Code Online (Sandbox Code Playgroud)
我想加入他们,所以我得到这个结果(-for undefined):
[
'5',
-,
'8',
'13',
-,
'14',
-,
-,
'11',
-,
-,
'7'
]
Run Code Online (Sandbox Code Playgroud)
我当前的语法:
Enumerable.from(array1).join(array2, '$', '$.date', "outer, inner => inner.value").toArray()
Run Code Online (Sandbox Code Playgroud)
这会产生一个值数组,但结果仍然是内部连接的,并且它会过滤掉可能是项目的内容null/undefined。
我怎样才能做到这一点?LinqJS 的连接语法如何工作?
我不确定 LinqJS,但常规 JS 完全有能力做到这一点。
有几种方法可以解决这个问题。、reduce()、map()和sort()函数非常具有 Linq 风格,并且在本机上运行良好。(还有filter()其他一些)。
const dates = [
'2017-02-10',
'2017-02-11',
'2017-02-12',
'2017-02-13',
'2017-02-20',
'2017-02-21',
'2017-02-22',
'2017-02-23',
'2017-02-24',
'2017-02-25',
'2017-02-26',
'2017-02-27'
]
const data = [
{ date: '2017-02-10', value: 5 },
{ date: '2017-02-12', value: 8 },
{ date: '2017-02-13', value: 13 },
{ date: '2017-02-21', value: 14 },
{ date: '2017-02-24', value: 11 },
{ date: '2017-02-27', value: 7 }
];
const result = dates
.map(date => ({ date, value: '-' }))
.concat(data)
.filter(({ date, value }) => !(data.find(d => d.date === date) && value === '-'))
.sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime());
console.log(result);
const justValues = Object.keys(result).map(key => result[key].value);
console.log(justValues);Run Code Online (Sandbox Code Playgroud)