使用javascript返回对象数组的新形式

时间:2018-12-01 07:42:26

标签: javascript arrays json object

我的对象

const data = {
  "rows": [
    {
      "code": "ct101",
      "username": "admin",
      "subscriptionExpiresOn": "2019-11-27T09:35:38.916Z",
    },
    {
      "code": "bt101",
      "username": "admin",
      "subscriptionExpiresOn": "2016-11-27T08:20:57.297Z",
    },
  ]
}

行数组中我的对象中有一个名为“ subscriptionExpiresOn”的键,

我要检查条件,如果subscriptionExpiresOn为

// Changing the value into 'Expired'
const data = {
  "rows": [
    {
      "code": "ct101",
      "username": "admin",
      "subscriptionExpiresOn": "2019-11-27T09:35:38.916Z",
    },
    {
      "code": "bt101",
      "username": "admin",
      "subscriptionExpiresOn": "Expired",
    },
  ]
}

这是我使用地图方法尝试过的方法:

const now = new Date();

data.rows.map((index) => {
  if (index.subscriptionExpiresOn < now) {
    return {
      subscriptionExpiresOn: 'Expired',
    };
  } else {
    return data;
  }
});

但是它不起作用。

3 个答案:

答案 0 :(得分:2)

您需要进行一些更改。首先,您需要将每个ooxml-schemas-*.jar转换为一个日期对象,以便可以与row.subscriptionExpiresOn进行正确比较。另外,除了已更新的键之外,您还需要返回该行,因此我正在使用ES6 spread syntax来完成此操作:

now

然后,如果您要保留结构,只需以原始格式返回即可:

const data = {
  "rows": [
    {
      "code": "ct101",
      "username": "admin",
      "subscriptionExpiresOn": "2019-11-27T09:35:38.916Z",
    },
    {
      "code": "bt101",
      "username": "admin",
      "subscriptionExpiresOn": "2016-11-27T08:20:57.297Z",
    },
  ]
}

const now = new Date();

const mapped = data.rows.map((row) => {
  if (new Date(row.subscriptionExpiresOn) < now) {
    return {
      ...row,
      subscriptionExpiresOn: 'Expired',
    };
  } else {
    return row;
  }
});

console.log(mapped);

答案 1 :(得分:2)

在尝试更改同一数组时,应使用 Array.forEach 。为了进行日期比较,您需要将字符串转换为日期对象。

const now = new Date();
const data = {"rows": [{"code": "ct101","username": "admin","subscriptionExpiresOn": "2019-11-27T09:35:38.916Z"},{"code": "bt101","username": "admin","subscriptionExpiresOn": "2016-11-27T08:20:57.297Z"}]};

data.rows.forEach(o => {
  if(new Date(o.subscriptionExpiresOn) < now) o.subscriptionExpiresOn = 'Expired'
});
console.log(data.rows);

答案 2 :(得分:0)

它不起作用是因为:

  • map的签名是一个函数,其第一个参数是项目而不是索引;
  • 您只返回要更改的内容。相反,返回整个对象,用新的覆盖旧值;
  • 在else分支中,您将返回整个原始数组,而不仅仅是返回原样;
  • 您正在将日期与日期进行比较。

这是工作代码。

const data = {
  "rows": [
    {
      "code": "ct101",
      "username": "admin",
      "subscriptionExpiresOn": "2019-11-27T09:35:38.916Z",
    },
    {
      "code": "bt101",
      "username": "admin",
      "subscriptionExpiresOn": "2016-11-27T08:20:57.297Z",
    },
  ]
}

const now = new Date();

const result = data.rows.map((item) => {
  if (new Date(item.subscriptionExpiresOn) < now) {
    return {
      ...item,
      subscriptionExpiresOn: 'Expired',
    };
  } else {
    return item;
  }
});

console.log(result)