繁体   English   中英

Javascript | 在嵌套的 arrays 中过滤

[英]Javascript | Filtering in nested arrays

我需要过滤以下数据,用户在输入中键入的文本,但仅限于 3 个键(日期、披萨和大小)

  var pizzaData = [{
    "id": 1,
    "date": "2020-03-20",
    "order": [
      {"pizza": "chicken", "comment": "No onion", "size": "personal"}, 
      {"pizza": "cheese", "comment": "", "size": "medium"}
    ]}, {
    "id": 2,
    "date": "2020-03-21",
    "order": [
      {"pizza": "veggie", "comment": "Extra cheese", "size": "big"}
    ]}, {
    "id": 3,
    "date": "2020-03-22",
    "order": [
      {"pizza": "Pepperoni", "comment": "", "size": "big"},
      {"pizza": "Double cheese", "comment": "", "size": "big"},
      {"pizza": "BBQ chicken", "comment": "", "size": "small"},
      {"pizza": "Mushrooms", "comment": "", "size": "big"}
    ]}, {
    "id": 4,
    "date": "2020-03-25",
    "order": [
      {"pizza": "cheese", "comment": "", "size": "small"}
    ]}
  ]

我正在使用 angularjs,我尝试使用 $filter,在 js 中创建过滤器和过滤器方法,但我只能在“订单”数组中获取第一个 object。 该代码应该可以在 Chrome、Mozilla 和 Explorer 11 中运行

我正在尝试实现这样的目标

input = "cheese"

pizzaData = [{
    "id": 1,
    "date": "2020-03-20",
    "order": [
      {"pizza": "chicken", "comment": "No onion", "size": "personal"}, 
      {"pizza": "cheese", "comment": "", "size": "medium"}
    ]}, {
    "id": 4,
    "date": "2020-03-25",
    "order": [
      {"pizza": "cheese", "comment": "", "size": "small"}
    ]}
  ]




input = 2020-03-21

pizzaData = [{
    "id": 2,
    "date": "2020-03-21",
    "order": [
      {"pizza": "veggie", "comment": "Extra cheese", "size": "big"}
    ]}
  ]



input = onion

pizzaData = []


您可以按每个顺序创建一个包含要搜索的所有值的字符串,并检查该字符串中的搜索键。

 var pizzaData = [{ "id": 1, "date": "2020-03-20", "order": [ {"pizza": "chicken", "comment": "No onion", "size": "personal"}, {"pizza": "cheese", "comment": "", "size": "medium"} ]}, { "id": 2, "date": "2020-03-21", "order": [ {"pizza": "veggie", "comment": "Extra cheese", "size": "big"} ]}, { "id": 3, "date": "2020-03-22", "order": [ {"pizza": "Pepperoni", "comment": "", "size": "big"}, {"pizza": "Double cheese", "comment": "", "size": "big"}, {"pizza": "BBQ chicken", "comment": "", "size": "small"}, {"pizza": "Mushrooms", "comment": "", "size": "big"} ]}, { "id": 4, "date": "2020-03-25", "order": [ {"pizza": "cheese", "comment": "", "size": "small"} ]} ] function getOrder(key) { return pizzaData.filter((eachOrder) => { let text = [eachOrder.date]; text = text.concat(eachOrder.order.map(({pizza, size}) => ([pizza, size]))); return text.join(' ').includes(key); }) } console.log('2020-03-21 => ', getOrder('2020-03-21')) console.log("cheese => ", getOrder("cheese"))

 var pizzaData = [{ "id": 1, "date": "2020-03-20", "order": [ {"pizza": "chicken", "comment": "No onion", "size": "personal"}, {"pizza": "cheese", "comment": "", "size": "medium"} ]}, { "id": 2, "date": "2020-03-21", "order": [ {"pizza": "veggie", "comment": "Extra cheese", "size": "big"} ]}, { "id": 3, "date": "2020-03-22", "order": [ {"pizza": "Pepperoni", "comment": "", "size": "big"}, {"pizza": "Double cheese", "comment": "", "size": "big"}, {"pizza": "BBQ chicken", "comment": "", "size": "small"}, {"pizza": "Mushrooms", "comment": "", "size": "big"} ]}, { "id": 4, "date": "2020-03-25", "order": [ {"pizza": "cheese", "comment": "", "size": "small"} ]} ] function search(data){ let searchData=[]; if(data.split("-").length==3){ for(var i=0;i<pizzaData.length;i++){ if(pizzaData[i].date==data){ searchData.push(pizzaData[i]); } } return searchData; } for(var i=0;i<pizzaData.length;i++){ let orders=pizzaData[i].order; for(var j=0;j<orders.length;j++){ if(orders[j].pizza.toLowerCase().match(data.toLowerCase()) || orders[j].size.toLowerCase().match(data.toLowerCase())){ searchData.push(pizzaData[i]); } } } return searchData; } console.log(search("2020-03-21")); console.log(search("cheese"));

var pizzaData = [{
"id": 1,
"date": "2020-03-20",
"order": [
  {"pizza": "chicken", "comment": "No onion", "size": "personal"}, 
  {"pizza": "cheese", "comment": "", "size": "medium"}
]}, {
"id": 2,
"date": "2020-03-21",
"order": [
  {"pizza": "veggie", "comment": "Extra cheese", "size": "big"}
]}, {
"id": 3,
"date": "2020-03-22",
"order": [
  {"pizza": "Pepperoni", "comment": "", "size": "big"},
  {"pizza": "Double cheese", "comment": "", "size": "big"},
  {"pizza": "BBQ chicken", "comment": "", "size": "small"},
  {"pizza": "Mushrooms", "comment": "", "size": "big"}
]}, {
"id": 4,
"date": "2020-03-25",
"order": [
  {"pizza": "cheese", "comment": "", "size": "small"}
]} ]

 const searchData = keywords => {
  const filteredData = pizzaData.filter(pizza => {

const filteredOrder = pizza.order.filter(({pizza, size}) => {
  return (pizza === keywords || size === keywords)
})

return (pizza.date === keywords || !! 
  (filteredOrder.length))

   })
    return filteredData
 }

  console.log(searchData('small'))

上面的答案很棒,我正在分享我的尝试。 我正在使用filter function 并在其中使用some来检测任何匹配情况(按订单):

 var pizzaData = [{ "id": 1, "date": "2020-03-20", "order": [ {"pizza": "chicken", "comment": "No onion", "size": "personal"}, {"pizza": "cheese", "comment": "", "size": "medium"} ]}, { "id": 2, "date": "2020-03-21", "order": [ {"pizza": "veggie", "comment": "Extra cheese", "size": "big"} ]}, { "id": 3, "date": "2020-03-22", "order": [ {"pizza": "Pepperoni", "comment": "", "size": "big"}, {"pizza": "Double cheese", "comment": "", "size": "big"}, {"pizza": "BBQ chicken", "comment": "", "size": "small"}, {"pizza": "Mushrooms", "comment": "", "size": "big"} ]}, { "id": 4, "date": "2020-03-25", "order": [ {"pizza": "cheese", "comment": "", "size": "small"} ]} ]; let filterPizza=(filterData)=>{ result=pizzaData.filter((value)=> value.date == filterData || value.order.some((elem)=>elem.pizza.toUpperCase()==filterData.toUpperCase() || elem.size.toUpperCase()==filterData.toUpperCase())) return result; } console.log(filterPizza('cheese')); console.log(filterPizza('2020-03-21'));

暂无
暂无

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

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