首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS滤波器阵列所有字段

JS滤波器阵列所有字段
EN

Stack Overflow用户
提问于 2022-05-04 03:59:49
回答 3查看 87关注 0票数 0

如何使该函数搜索数组中的所有字段,而不是时间上的单个变量?

代码语言:javascript
复制
const filteredData = tickets.filter(val => {
  if (inputText === '') {
    return val;
  } else {
    return val.ticket.ticketNumber.toLowerCase().includes(inputText);
    // return val.ticket.gallons.toLowerCase().includes(inputText);
  }
});

票证示例(单击以显示)

代码语言:javascript
复制
[
  {
    index: "-N-ecIthFAo6EaEe7BVT",
    ticket: {
      appName: "biolime",
      driver: "Walt",
      endUser: "Verhoff Farms",
      field: "Marston-North 40",
      gallons: "1,237,887",
      lagoon: "CAMP-3",
      lagoonMaterial: "Lime Slurry",
      source: "Campbell's Soup",
      ticketDate: "04-04-2022",
      ticketNumber: "5825",
      ticketTime: "7:26:49.484 am",
      truck: "",
      zone: "Zone B",
    },
  },
  {
    index: "-N17TZscKkfW0TYE84WZ",
    ticket: {
      appName: "biolime",
      driver: "Walt",
      endUser: "Rob Howell",
      field: "testing",
      gallons: "9,999",
      lagoon: "CAMP-3",
      lagoonMaterial: "Lime Slurry",
      source: "Campbell's Soup",
      ticketDate: "04-13-2022",
      ticketNumber: "5826",
      ticketTime: "4:35:44.252 pm",
      truck: "10",
      zone: "",
    },
  },
];

EN

回答 3

Stack Overflow用户

发布于 2022-05-04 04:15:49

您不需要每次在过滤器回调中检查inputText === ''

代码语言:javascript
复制
const ticket = [{
    "appName": "biolime",
    "driver": "Walt",
    "endUser": "Verhoff Farms",
    "field": "Marston-North 40",
    "gallons": "1,237,887",
    "lagoon": "CAMP-3",
    "lagoonMaterial": "Lime Slurry",
    "source": "Campbell's Soup",
    "ticketDate": "04-04-2022",
    "ticketNumber": "5825",
    "ticketTime": "7:26:49.484 am",
    "truck": "",
    "zone": "Zone B"
  },
  {
    "appName": "biolime",
    "driver": "Walt",
    "endUser": "Rob Howell",
    "field": "testing",
    "gallons": "9,999",
    "lagoon": "CAMP-3",
    "lagoonMaterial": "Lime Slurry",
    "source": "Campbell's Soup",
    "ticketDate": "04-13-2022",
    "ticketNumber": "5826",
    "ticketTime": "4:35:44.252 pm",
    "truck": "10",
    "zone": ""
  }
]


function filteredData(e) {
  const filteredData = e.target.value && ticket.filter(val => {
    return val.ticketNumber.toLowerCase().includes(e.target.value);
  });
  console.log(filteredData)

};
代码语言:javascript
复制
<input type="text" onChange="filteredData(event)">

票数 1
EN

Stack Overflow用户

发布于 2022-05-04 04:13:48

也许你应该遍历一下票并返回一张,这给了inputText在字段中的位置?

代码语言:javascript
复制
const filteredData = tickets.filter(ticket => {
  if (inputText === '') {
    return ticket;
  } else if (ticket.ticketNumber.toLowerCase().includes(inputText)) {
    return ticket;
  }
});

如果我正确理解了问题..。

票数 0
EN

Stack Overflow用户

发布于 2022-05-04 04:12:21

正如@Barmar所建议的那样,用Object.values(obj)循环遍历对象的所有字段,并使用Array.prototype.some()测试是否满足条件。但是就像我说的,您需要做一些不同的事情,因为您有嵌套的对象。

代码语言:javascript
复制
const tickets = [{
    index: "-N-ecIthFAo6EaEe7BVT",
    ticket: {
      appName: "biolime",
      driver: "Walt",
      endUser: "Verhoff Farms",
      field: "Marston-North 40",
      gallons: "1,237,887",
      lagoon: "CAMP-3",
      lagoonMaterial: "Lime Slurry",
      source: "Campbell's Soup",
      ticketDate: "04-04-2022",
      ticketNumber: "5825",
      ticketTime: "7:26:49.484 am",
      truck: "",
      zone: "Zone B",
    },
  },
  {
    index: "-N17TZscKkfW0TYE84WZ",
    ticket: {
      appName: "biolime",
      driver: "Walt",
      endUser: "Rob Howell",
      field: "testing",
      gallons: "9,999",
      lagoon: "CAMP-3",
      lagoonMaterial: "Lime Slurry",
      source: "Campbell's Soup",
      ticketDate: "04-13-2022",
      ticketNumber: "5826",
      ticketTime: "4:35:44.252 pm",
      truck: "10",
      zone: "",
    },
  },
];


const filterHelper = (ticket, inputText) => {
  if (inputText === '') {
    return true;
  } else {
    return Object.values(ticket).some((property) => {
      if (typeof property === 'string' || property instanceof String) {
        return property.toString().toLowerCase().includes(inputText);
      } else
        return filterHelper(property, inputText);
    });
  }
};
const filter = (tickets, inputText) => tickets.filter((ticket) => filterHelper(ticket, inputText));

//const filteredData = filter(tickets, "5825");

//console.log(filteredData);

const inputTextInput = document.querySelector("#inputText");
document.querySelector("#form").addEventListener("submit", (e) => {
  e.preventDefault();
  const inputText = inputTextInput.value;
  const filteredData = filter(tickets, inputText);
  console.log(filteredData);
});
代码语言:javascript
复制
<form id="form">
  <input id="inputText" placeholder="filter" />
  <button type="submit">filter</button>
</form>

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72107774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档