我试图将日期和值的数组添加到日期的数组,而不会过滤掉多余的日期。 LinqJS引用here在如何实际使用联接方面非常令人困惑。 here问题也没有太大帮助。

编辑:

在此处加入文档:https://svschmidt.github.io/linqjs/Collection.html#Join

看来我需要帮助来整理如何使联接成为outer而不是inner联接,因此它包含null / undefined值。

说我有两个数组:

数组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'
]

数组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 }
]

我想加入他们,因此得到以下结果(-表示undefined):
[
'5',
-,
'8',
'13',
-,
'14',
-,
-,
'11',
-,
-,
'7'
]

我目前的语法:
Enumerable.from(array1).join(array2, '$', '$.date', "outer, inner => inner.value").toArray()

这将生成一个值数组,但结果仍是内部联接的,并过滤掉了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);

10-08 10:53