【发布时间】:2017-12-29 20:17:48
【问题描述】:
我正在尝试检查我的数组 data 中是否存在某个项目,如果存在则阻止它被添加到数组中。
handleCheck 函数将在数组中已存在项目时返回 true,但我不知道如何使用它来防止将项目添加到数组中。
我试图在handlePush 函数this.handleCheck(item) == false ? 中使用它,它应该检查它是否为假,如果是,则推送,如果它返回真,它应该说它存在,但目前它不能正常工作即使项目存在也推送到数组并且它永远不会 console.log 'exists`
如何更改我的 handlePush 函数以使用 handleCheck 并防止再次添加数组中已存在的项目?
https://www.webpackbin.com/bins/-KpnhkEKCpjXU0XlNlVm
import React from 'react'
import styled from 'styled-components'
import update from 'immutability-helper'
const Wrap = styled.div`
height: auto;
background: papayawhip;
width: 200px;
margin-bottom:10px;
`
export default class Hello extends React.Component {
constructor() {
super()
this.state = {
data: []
}
this.handlePush = this.handlePush.bind(this)
this.handleRemove = this.handleRemove.bind(this)
this.handleCheck = this.handleCheck.bind(this)
}
handlePush(item) {
this.handleCheck(item) == false ?
this.setState({
data: update(this.state.data, {
$push: [
item
]
})
})
: 'console.log('exists')
}
handleRemove(index) {
this.setState({
data: update(this.state.data, {
$splice: [
[index,1]
]
})
})
}
handleCheck(val) {
return this.state.data.some(item => val === item.name);
}
render() {
return(
<div>
<button onClick={() => this.handlePush({name: 'item2'})}>push</button>
<button onClick={() => this.handlePush({name: 'item3'})}>push item3</button>
{this.state.data.length > 1 ? this.state.data.map(product =>
<Wrap onClick={this.handleRemove}>{product.name}</Wrap>) : 'unable to map' }
{console.log(this.state.data)}
{console.log(this.handleCheck('item2'))}
{console.log(this.handleCheck('item3'))}
</div>
)
}
}
【问题讨论】:
-
如果您不需要特别使用数组,您可以使用对象属性创建哈希图,以确保唯一性
-
谢谢,我会研究使用哈希图的可能性
-
我不是想回答这个问题,只是建议一个替代方案来帮助你,如果你最终使用这种方法,你应该用你所做的事情来回答你自己的问题:)跨度>
标签: javascript arrays reactjs