检查数组是否存在于React中

tom*_*son 4 javascript arrays reactjs

我正在尝试检查我的数组中data是否存在某个项目,如果确实存在,则阻止将其添加到数组中.

handleCheck如果一个项已经存在于数组中,该函数将返回true但我不知道如何使用它来阻止该项添加到数组中.

我试图在handlePush函数中 使用它,this.handleCheck(item) == false ?它应该检查它是否为假,如果是,那么推,如果它返回true它应该说它存在但是此时这不起作用,因为它将推送到数组,即使该项存在它永远不会console.log'存在'

如何更改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>
    )

  }
}
Run Code Online (Sandbox Code Playgroud)

Bal*_*i M 22

在 React 中搜索数组中存在的 Check value 时,我进入了这个页面,并想为其他认为有任何特殊情况可以使用 React 检查数组中的值的人提供一个解决方案(除了这个问题) .

您也可以正确地使用默认的 JavaScript 方法。React 没有什么特别之处。

var arr = ["steve", "bob", "john"];

console.log(arr.indexOf("bob") > -1); //true
Run Code Online (Sandbox Code Playgroud)

谢谢你。

  • 天才……绝对的天才。简单是最好的。我尝试了各种方法,但这个简单的单行...伙计,谢谢! (2认同)

小智 14

它应该是:

handleCheck(val) {
    return this.state.data.some(item => val.name === item.name);
}
Run Code Online (Sandbox Code Playgroud)

因为val这里的对象不是字符串.

看看这个:https: //www.webpackbin.com/bins/-Kpo0Rk6Z8ysenWttr7q


小智 7

includes()在数组实例上使用该方法。

console.log(['red', 'green'].includes('red'))
console.log(['red', 'green'].includes('blue'))
Run Code Online (Sandbox Code Playgroud)