在 javascript 中动态推送即将到来的 ID 和值
push dynamically coming id's and value's in javascript
这个问题可能看起来有点令人困惑所以让我解释一下情况,我有一个类别字段,当它被选中时,我会根据该类别从 api 获取数据,例如当您选择类别时A,您可能会得到 id 的 1 到 3,或者当您选择类别 B 时,您会得到 id 的 8 到 11,所以我想做的是创建一个 Filter 数组,用 id 推送这些值,这样当用户键入内容时就像输入中的 sth
和 id 为 1 一样,这个对象被推送到数组中,如下所示:
Filters = [
{
id:1,
value: sth
}
]
所以我基本上做的是这样的:
this.props.Filters.map(item => (
<div className="from" key={item.id} id={item.id} >
<span className="title">{item.feature}</span>
<input type="text" placeholder="..." id={item.id} onChange={FilterPush}></input>
</div>
))
函数为:
const Filters = []
const FilterPush = (e) => {
const filter = {
id: e.currentTarget.getAttribute("id"),
value: e.currentTarget.value
}
Filters.push(filter)
}
我在这里遇到的问题是每次用户输入内容时都会将对象推送到 Filters
,
因此,当用户尝试键入 sth
时,Filter
等于:
Filters={
{id:1,value:s},
{id:1,value:st},
{id:1,value:sth}
}
但我希望它等于这个
Filters={
{id:1, value:sth}
}
请记住,id 是动态的,我不知道它们,并且不只有一个输入,我的意思是我们可以有 3 个具有不同 id 的输入应该发送到服务器。
只过滤掉已有的id:
const FilterPush = (e) => {
let id = e.currentTarget.getAttribute("id")
const filter = {
id,
value: e.currentTarget.value
}
Filters = Filters.filter(item => item.id !== id) // filter out existing id
Filters.push(filter)
}
非常简单,你只需要在推送元素之前检查推送元素的id是否已经在Filters数组中。
const FilterPush = (e) => {
let id = e.currentTarget.getAttribute("id")
const filter = {
id: e.currentTarget.getAttribute("id"),
value: e.currentTarget.value
}
Filters.map(item=>{
if(id == item.id){
available = true;
}
})
if(!available){
Filters.push(filter)
}
}
这个问题可能看起来有点令人困惑所以让我解释一下情况,我有一个类别字段,当它被选中时,我会根据该类别从 api 获取数据,例如当您选择类别时A,您可能会得到 id 的 1 到 3,或者当您选择类别 B 时,您会得到 id 的 8 到 11,所以我想做的是创建一个 Filter 数组,用 id 推送这些值,这样当用户键入内容时就像输入中的 sth
和 id 为 1 一样,这个对象被推送到数组中,如下所示:
Filters = [
{
id:1,
value: sth
}
]
所以我基本上做的是这样的:
this.props.Filters.map(item => (
<div className="from" key={item.id} id={item.id} >
<span className="title">{item.feature}</span>
<input type="text" placeholder="..." id={item.id} onChange={FilterPush}></input>
</div>
))
函数为:
const Filters = []
const FilterPush = (e) => {
const filter = {
id: e.currentTarget.getAttribute("id"),
value: e.currentTarget.value
}
Filters.push(filter)
}
我在这里遇到的问题是每次用户输入内容时都会将对象推送到 Filters
,
因此,当用户尝试键入 sth
时,Filter
等于:
Filters={
{id:1,value:s},
{id:1,value:st},
{id:1,value:sth}
}
但我希望它等于这个
Filters={
{id:1, value:sth}
}
请记住,id 是动态的,我不知道它们,并且不只有一个输入,我的意思是我们可以有 3 个具有不同 id 的输入应该发送到服务器。
只过滤掉已有的id:
const FilterPush = (e) => {
let id = e.currentTarget.getAttribute("id")
const filter = {
id,
value: e.currentTarget.value
}
Filters = Filters.filter(item => item.id !== id) // filter out existing id
Filters.push(filter)
}
非常简单,你只需要在推送元素之前检查推送元素的id是否已经在Filters数组中。
const FilterPush = (e) => {
let id = e.currentTarget.getAttribute("id")
const filter = {
id: e.currentTarget.getAttribute("id"),
value: e.currentTarget.value
}
Filters.map(item=>{
if(id == item.id){
available = true;
}
})
if(!available){
Filters.push(filter)
}
}