![](/img/trans.png)
[英]How can I check whether an item exists in localstorage or not using pure javascript
[英]How can I check whether an item already exists in state?
无论如何,我是否可以使用此代码检查某个数字是否已存在(例如,是否有多个特定数字的实例等)? 我想不出任何方法,我已经尝试了所有我能想到的方法(Indexof、contains 等,甚至将值转换为数组也无济于事)。
const button1 = [{number: 'one', value: '1'},{number: 'two', value: '2'},{number: 'three', value: '3'},{number: 'divide', value: '/'}];
const button2 = [{number: 'four', value: '4'},{number: 'five', value: '5'},{number: 'six', value: '6'},{number: 'add', value: '+'}];
const button3 = [{number: 'seven', value: '7'},{number: 'eight', value: '8'},{number: 'nine', value: '9'},{number: 'subtract', value: '-'}];
const button4 = [{number: 'zero', value: '0'},{number: 'decimal', value: '.'},{number: 'equals', value: '='},{number: 'multiply', value: '*'}];
class Calculator extends Component {
constructor(props) {
super(props);
this.state = { value: "0"};
this.handleClick = this.handleClick.bind(this);
}
handleClick(evt) {
const id = evt.target.id;
const result = evt.target.value;
switch(id) {
case 'clear':
this.setState({ value: "0"});
break;
case 'equals':
this.setState(prevState => ({
value: math.eval(this.state.value)
}));
break;
default: this.setState(prevState => ({
value: `${prevState.value}${result}`.replace(/([/+\-/*=])([/+\-*=])/g, "$2")
.replace(/^0+(?=[1-9])/, "")
.replace(/^0+(?=\.)/, "0")
.replace(/^0+\B/, "")
.replace(/\.+/g,".")
}));
}
}
render() {
return(
<div id="container">
<Display value={this.state.value} />
<div>
{button1.map((el, index) => <Button onClick={this.handleClick} key={el.index} id={el.number} value={el.value} />)}
</div>
<div>
{button2.map((el, index) => <Button onClick={this.handleClick} key={el.index} id={el.number} value={el.value} />)}
</div>
<div>
{button3.map((el, index) => <Button onClick={this.handleClick} key={el.index} id={el.number} value={el.value} />)}
</div>
<div>
{button4.map((el, index) => <Button onClick={this.handleClick} key={el.index} id={el.number} value={el.value} />)}
</div>
<div>
<Button onClick={this.handleClick} id="clear" value={'clear'} />
</div>
</div>
)
}
}
在 Handle click 中,尝试将默认值替换为以下
handleClick(evt) {
const id = evt.target.id;
let result = evt.target.value;
switch (id) {
case "clear":
this.setState({ value: "0" });
break;
case "equals":
this.setState(prevState => ({
value: math.eval(this.state.value)
}));
break;
default:
this.setState(prevState => {
const numbers = prevState.value.split(/[+\-*=]/g);
const lastNumber = numbers[numbers.length - 1];
if (result === ".") {
console.log((lastNumber.match(/\./g) || []).length);
if (lastNumber.length === 0) {
result = ""; //Remove if first charracter is decimal
}
if ((lastNumber.match(/\./g) || []).length > 0) {
result = "";
}
}
let value = `${prevState.value}${result}`
.replace(/([+\-*=])([+\-*=])/g, "$2")
.replace(/^0+(?=[1-9])/, "")
.replace(/^0+(?=\.)/, "0")
.replace(/^0+\B/, "");
return {
value
};
});
}
}
您正在寻找的方法includes
根据您的附加信息编辑:
var positions = [];
for(i = 0; i < this.state.value.length; i++) {
if(this.state.value.charAt(i) === result) {
positions.push(i);
}
}
您必须进行编辑以满足您的特定需求(我的印象是您正在寻找您尚未公开说明的特定内容),但我想这会让您克服障碍。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.