【发布时间】:2020-05-30 00:49:15
【问题描述】:
我正在寻找一种算法优化来解决一个可能难以解释的简单问题。当您阅读代码时,我不是在寻找速度或性能,而是在寻找简单性和清晰度。也许有人有比我更聪明的解决方案。我想单行可能有点过头了。
我有两个按日期排序的单元格集合。每个单元格都可以有一个价格值。我们可以假设同一日期的两个单元格中不可能有价格。我想要一个日期集合,但是日期没有价格:
- 哪个系列的价格与过去最接近
- 如果没有过去的价格,那就看未来
这是我目前所拥有的(它给出了准确的结果):
const array1 = [
{ date: '2019-11-10' },
{ date: '2019-11-11' },
{ date: '2019-11-12' },
{ date: '2019-11-13' },
{ date: '2019-11-14' },
{ date: '2019-11-15', price: 10 },
{ date: '2019-11-16' },
];
const array2 = [
{ date: '2019-11-10' },
{ date: '2019-11-11' },
{ date: '2019-11-12', price: 10 },
{ date: '2019-11-13' },
{ date: '2019-11-14' },
{ date: '2019-11-15' },
{ date: '2019-11-16' },
];
const merged = Object.values(array1).map((element, index) => {
let filled;
if (element.price) {
filled = 1;
}
if (array2[index].price) {
filled = 2;
}
if (filled) {
return {
date: element.date,
filled
}
} else {
return {
date: element.date
}
}
});
const first = merged.find(element => element.filled);
let currentFill = first && first.filled;
const emptyMap = merged.map((element, index, array) => {
if (!element.filled) {
return {
date: element.date,
empty: currentFill
}
}
currentFill = element.filled;
return element;
})
console.log(emptyMap);
【问题讨论】:
-
在输出中包含日期和价格不是更好吗?如果您想知道某个日期的价格,您仍然必须找到它。或者,您可以添加一个属性,告诉您价格来自哪个集合和/或告诉您它是过去、未来还是确切日期的价格。也许更好:创建一个以日期为键的对象,这样您就可以在 O(1) 中查询这些日期的价格。
-
我愿意接受任何建议,即使这意味着要改变结构。最重要的是我有两个单独的日期集合,其中一些有价格,我需要将它与这两个条件合并。
标签: javascript arrays algorithm optimization