[英]How to Add Function Returns as Key-Values in Every Object in an Array
我有多个函数可以计算对象数组中的值。 我正在尝试通过数组中的所有 7,200 个对象运行这些函数,然后将这些函数的返回作为新的键值对添加到每个 object 中。下面是一个示例,其中包含 5 object 数组而不是 7200 object 数组.
我是 JavaScript 的新手,不确定如何解决这个问题。 我可以使用 const currentDay = myData.at(-1) 访问每个 object 的“状态”,控制台记录结果并手动将其作为新的键值对插入最后一个 object,将 currentDay 更改为 (-2)等。因为我有 7000 多个对象可以使用,所以我正在寻找一种不手动执行此操作的方法。 我希望生成的新数组如下所示:
const myData2 = [
{
Date: "1990-02-09",
End: "500",
PreviousEnd: "480",
NextEnd: "515",
Status: ["Positive 2 Day", "Next Day Up"],
},
{
Date: "1990-02-10",
End: "515",
PreviousEnd: "500",
NextEnd: "505",
Status: ["Positive 1 Day", "Next Day Down"],
},
{
Date: "1990-02-11",
End: "505",
PreviousEnd: "515",
NextEnd: "530",
Status: ["Negative", "Next Day Up"],
},
{
Date: "1990-02-12",
End: "530",
PreviousEnd: "525",
NextEnd: "555",
Status: ["Positive 2 Day", "Next Day Up"],
},
{
Date: "1990-02-13",
End: "555",
PreviousEnd: "530",
NextEnd: "570",
Status: ["Positive 2 Day", "Next Day Up"],
},
];
这是我当前的代码。
const myData = [ { Date: "1990-02-09", End: "500", PreviousEnd: "480", NextEnd: "515", }, { Date: "1990-02-10", End: "515", PreviousEnd: "500", NextEnd: "505", }, { Date: "1990-02-11", End: "505", PreviousEnd: "515", NextEnd: "530", }, { Date: "1990-02-12", End: "530", PreviousEnd: "525", NextEnd: "555", }, { Date: "1990-02-13", End: "555", PreviousEnd: "530", NextEnd: "570", }, ]; const currentDay = myData.at(-1); const endUpDown = (function () { if ( currentDay.End > currentDay.PreviousEnd && currentDay.End > currentDay.NextEnd ) { return "Positive 1 Day"; } else if ( currentDay.End > currentDay.PreviousEnd && currentDay.End < currentDay.NextEnd ) { return "Positive 2 Day"; } else { return "Negative"; } })(); const nextDayUp = (function () { if (currentDay.End < currentDay.NextEnd) { return "Next Day Up"; } else { return "Next Day Down"; } })(); const currentStatus = [endUpDown, nextDayUp]; console.log(currentStatus);
你拥有所有的部分,你只需要重新排列它们,使它们可以在map()
调用中调用。 我所做的就是将您的IIFE s 变成带有参数currentDay
的命名函数,该函数期望 object 而不是像您的示例那样在全局currentDay
上调用它们。
map()
调用只是使用扩展语法克隆传递的 object,然后将status
属性添加为两个 function 调用的元组。
const myData = [{ Date: '1990-02-09', End: '500', PreviousEnd: '480', NextEnd: '515', }, { Date: '1990-02-10', End: '515', PreviousEnd: '500', NextEnd: '505', }, { Date: '1990-02-11', End: '505', PreviousEnd: '515', NextEnd: '530', }, { Date: '1990-02-12', End: '530', PreviousEnd: '525', NextEnd: '555', }, { Date: '1990-02-13', End: '555', PreviousEnd: '530', NextEnd: '570', },]; function endUpDown(currentDay) { if ( currentDay.End > currentDay.PreviousEnd && currentDay.End > currentDay.NextEnd ) { return 'Positive 1 Day'; } else if ( currentDay.End > currentDay.PreviousEnd && currentDay.End < currentDay.NextEnd ) { return 'Positive 2 Day'; } else { return 'Negative'; } } function nextDayUp(currentDay) { if (currentDay.End < currentDay.NextEnd) { return 'Next Day Up'; } else { return 'Next Day Down'; } } const result = myData.map((currentDay) => ({...currentDay, status: [endUpDown(currentDay), nextDayUp(currentDay)], })); console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.