繁体   English   中英

根据条件过滤javascript中的对象数组?

[英]filter array of object in javascript based on conditions?

我正在尝试在 javascript 中过滤一个数组以获得一个简单的表单。

数组看起来像这样,

var Details = [
  {
    Magic: "Mana",
    scheduledtimes: [8,14],
    startdate: "1996-12-02",
  },
  {
    Magic: "Vispasion",
    scheduledtimes: [8],
    startdate: "1996-12-02",
  },
  ...
];

我只想找到正确的魔力,然后如果选择删除魔力,就可以删除值或删除对象。

这完全删除了对象,

var Test = Details.find((v) => v.Magic === "Mana")
  ? Details.filter((v) => v.Magic !== "Mana")
  : [...Details, "Mana"];

但是,当我不确定如何简单地删除时间值或字符串值,但保持对象整体相同时?

预期的结果是,如果我删除了一个特定的时间值,

var Details = [
  {
    Magic: "Mana",
    scheduledtimes: [8],
    startdate: "1996-12-02",
  },
  {
    Magic: "Vispasion",
    scheduledtimes: [8],
    startdate: "1996-12-02",
  },

我的理解是,您想根据某些条件编辑或删除数组中的对象,您可以使用reduce来实现它。

 var Details = [{ Magic: "Mana", scheduledtimes: [8], startdate: "1996-12-02", }, { Magic: "Mana2", scheduledtimes: [8, 14], startdate: "1996-12-02", }, { Magic: "Vispasion", scheduledtimes: [8], startdate: "1996-12-02", }, { Magic: "Untouched", scheduledtimes: [8], startdate: "1996-12-02", }, ]; var Test = Details.reduce((acc, power) => { if (power.Magic === "Mana") return acc; // remove mana powers if (power.Magic === "Mana2") { // remove 14 in times for Mana2 powers return [...acc, { ...power, scheduledtimes: power.scheduledtimes.filter(time => time !== 14) }] } if (power.Magic === "Vispasion") { // modify the power by concatenating an new object with partial info return [...acc, { Magic: power.Magic }]; } return [...acc, power]; // leave the power in the array by default }, []); console.log(Test)

在你的情况下,你只需要返回你想要的

var Test = Details.find(v=> v.Magic === "Mana") ? Details.filter(v => { if(v.Magic !== "Mana") return { return {Magic: a.Magic} }) : [...Details, "Mana"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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