首页 > 解决方案 > VueJS中对象的过滤值

问题描述

我需要检查startAt是否存在于对象中。如果它在其中,它应该返回该对象的id

目的:

[{
  "id": "1234567",
  "createTimestamp": "2020",
  "name": {
    "action": "",
    "allDay": false,
    "category": "Misc",
    "startAt": "05",
    "title": "foo"
  },
  "updateTimestamp": "2020"
}]

以下是我到目前为止所拥有的。过滤有效,但我无法访问id来返回它。

<div v-for="(hour, i) in 24" :key="i">
  {{ filterByHour(hour) }}
</div>
filterByHour(id) {
  if (id < 10) {
    id = 0 + id
  }

  const result = this.events.filter(item => item.name.startAt === id.toString())
  return result
}

如何返回对象的id

标签: javascriptarraysvue.jsobjectvuejs2

解决方案


  1. 我认为问题出在id = 0 + id. 当 id 为 5 时,此行5仅计算为 not 05。更改为id = '0' + id,它将转换为字符串。

  2. 在 之后filter,使用map来提取 id。

const events = [
  {
    id: "1234567",
    createTimestamp: "2020",
    name: {
      action: "",
      allDay: false,
      category: "Misc",
      startAt: "05",
      title: "foo"
    },
    updateTimestamp: "2020"
  }
];

function filterByHour(id) {
  if (id < 10) {
    id = "0" + id;
  }

  const result = events
    .filter(item => item.name.startAt === String(id))
    .map(x => x.id);
  return result;
}

console.log(filterByHour(5));
console.log(filterByHour(11));
console.log(filterByHour());


推荐阅读