【发布时间】:2020-10-09 14:42:03
【问题描述】:
我正在尝试基于对象数组创建搜索,并响应哪些数据采用这种格式:
const data = [
{"category 1" : [
{
"name": "Orange",
"desc": "juice, orange, Water"
},
{
"name": "Ananas",
"desc": "juice, ananas, water"
}
]
},
{"category 2" : [
{
"name": "Banana Split",
"desc": "Banana, ice cream, chocolat, topping",
"allergens": "nuts"
},
{
"name": "Mango Sticky Rice",
"desc": "Mango, rice, milk",
"allergens": ""
}
]
}
]
我将此数据存储在 useState 声明中,以便能够在数据更改时相应地呈现:
const [filteredBySearch, setFilteredBySearch] = useState(data)
我有一个输入,我们可以在其中输入任何内容并在 useState 声明中进行设置。
目标:
如果我输入我的输入:
"Jui"
输出应该是:
console.log(filteredBySearch)
/* output:
[
{"category 1" : [
{
"name": "Orange",
"desc": "juice, orange, Water"
},
{
"name": "Ananas",
"desc": "juice, ananas, water"
}
]
},
{"category 2" : []
}
]*/
示例 2: 如果我输入我的输入:
"Orange banana"
输出应该是:
console.log(filteredBySearch)
/* output: [
{"category 1" : [
{
"name": "Orange",
"desc": "juice, orange, Water"
}
]
},
{"category 2" : [
{
"name": "Banana Split",
"desc": "Banana, ice cream, chocolat, topping",
"allergens": "nuts"
}
]
}
]*/
我尝试使用 map 和 filter 创建一个新对象,并使用 setFilteredBySearch 对其进行设置,但我什么也得不到,即使是创建这个新对象。
这是完整的组件:
import Card from '../components/Card'
import React, { useState } from 'react';
export default function IndexPage({ data, search }) {
//search is the result of input value set on a useState
//Filter categoriesFoods by search
const [FilteredBySearch, setFilteredBySearch] = useState(data)
return (
<div className="main-content">
<div className="card-container">
{
FilteredBySearch.map(function(el, i) {
return (
<div key={i}>
<h2 className="category" id={Object.keys(el)}>{Object.keys(el)}</h2>
{
el[Object.keys(el)].map (function(itm,index){
return <Card key={index} infoItem={itm}/>
})
}
</div>
)
})
}
</div>
<style jsx>{`...`}</style>
</div>
)}
对我有什么想法吗? 非常感谢您的指导!
【问题讨论】:
-
发布您的完整组件代码将帮助人们了解您想要实现的目标。
-
谢谢@Jagan,完成了
-
@Jagan 随时删除您的 unvote 或告诉我是否需要任何其他信息。谢谢
标签: arrays reactjs object filter setstate