我有以下两个数组对象
const plan = [
{Item_ID : 01, Date:"2020-04-01", Items:"10"},
{Item_ID : 02, Date:"2020-04-01", Items:"20"},
{Item_ID : 03, Date:"2020-04-02", Items:"40"},
{Item_ID : 05, Date:"2020-04-03", Items:"10"},
];
const actual = [{Date:"2020-04-01", Actual_Items:"15"},
{Date:"2020-04-02", Actual_Items:"40"},
{Date:"2020-04-05", Actual_Items:"50"},
];
这两个数组显示了计划销售和实际销售,基于这两个数组,我试图创建以下数组
const plan = [
{Item_ID : 01, Date:"2020-04-01", Items:"10", Actual_Items:"15"},
{Item_ID : 02, Date:"2020-04-01", Items:"20", Actual_Items:"15"},
{Item_ID : 03, Date:"2020-04-02", Items:"40", Actual_Items:"40"},
{Item_ID : 05, Date:"2020-04-03", Items:"10", Actual_Items:"0"},
{Item_ID : null, Date:"2020-04-04", Items:"0", Actual_Items:"0"},
{Item_ID : null, Date:"2020-04-05", Items:"0", Actual_Items:"50"},
];
因此基于计划的数组,如果这些是当天的实际销售量,则显示为0。 如果没有任何计划但销售已完成,则Item_ID将为null物品将为null,但Actual_Items需要显示销售数量。
我创建了波纹管贴图函数,也许是完全错误的逻辑,我无法继续未来,不知道如何创建此最终数组
let op = plan.map((e,i)=>{
let temp = actual.find(element=> element.Date === e.Date)
if(temp.Actual_Items) {
e.Actual_Items= temp.Actual_Items;
}
return e;
})
console.log(op);
答案 0 :(得分:1)
您可以像这样加入两个数组:
let op = plan.concat(actual);
或
let op = [...plan, ...actual];
但是在您想要遍历“实际”以修改值“ Item_ID”和“ Items”之前。
解决方案如下:
const plan = [
{Item_ID : 01, Date:"2020-04-01", Items:"10"},
{Item_ID : 02, Date:"2020-04-01", Items:"20"},
{Item_ID : 03, Date:"2020-04-02", Items:"40"},
{Item_ID : 05, Date:"2020-04-03", Items:"10"},
];
const actual = [{Date:"2020-04-01", Actual_Items:"15"},
{Date:"2020-04-02", Actual_Items:"40"},
{Date:"2020-04-05", Actual_Items:"50"},
];
actual.forEach(function(part, index) {
part.Items = "0";
part.Item_ID = null;
this[index] = part;
}, actual);
let op = plan.concat(actual);
console.log(op);
答案 1 :(得分:1)
您可以将一个对象用于同一日期,收集plan
值,然后再添加actual
。
您最终可以将缺少的日期添加到结果数组中。
const
plan = [{ Item_ID: "01", Date: "2020-04-01", Items: "10" }, { Item_ID: "02", Date: "2020-04-01", Items: "20" }, { Item_ID: "03", Date: "2020-04-02", Items: "40" }, { Item_ID: "05", Date: "2020-04-03", Items: "10" }],
actual = [{ Date: "2020-04-01", Actual_Items: "15" }, { Date: "2020-04-02", Actual_Items: "40" }, { Date: "2020-04-05", Actual_Items: "50" }],
pattern = { Item_ID: null, Date: null, Items: "0", Actual_Items: "0" },
result = Object
.values(actual.reduce(
(r, o) => {
r[o.Date] = r[o.Date] || [{ ...pattern }];
r[o.Date].forEach(p => Object.assign(p, o));
return r;
},
plan.reduce((r, o) => {
(r[o.Date] = r[o.Date] || []).push({ ...pattern, ...o });
return r;
}, {})
))
.flat()
.reduce((r, o, i, { [i - 1]: prev }) => {
if (!r) return [o];
var p = new Date(prev.Date).getTime() + 1000 * 60 * 60 * 24;
while (p < new Date(o.Date).getTime()) {
let d = new Date;
d.setTime(p);
r.push({ ...pattern, Date: d.toISOString().slice(0, 10) });
p += 1000 * 60 * 60 * 24;
}
r.push(o);
return r;
}, undefined);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }