javascript - Linq JS 连接语法

标签 javascript arrays linq join left-join

我正在尝试将一组日期和值连接到一组日期,而不过滤掉额外的日期。 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 }
]

我想加入他们,所以我得到了这个结果(- for 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 风格,并且在 native 运行良好。 (还有 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);

关于javascript - Linq JS 连接语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43619402/

相关文章:

javascript - Angular 和内置的 javascript 映射函数

javascript - 如何在 Google Chart 中反射(reflect) addRows 下的函数输出

c# - Entity Framework 5.0。我的查询有什么问题?

C# linq 如何搜索两个日期之间的数据

javascript - vue.js/javascript新建对象onclick,其中一个值为你点击的列表项的值

javascript - 仅在父 li 上添加事件

ios - 为什么字符串添加需要这么长时间来构建?

c - 结构体指针数组 [C++]

c# - 从 DbLinq 源代码创建 Linq to sqlite dbml

javascript - Bootstrap 多选复选框应该在页面上可见