繁体   English   中英

如何在数组中的每个 Object 中添加 Function 作为键值返回

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM