Kev*_*ant 5 javascript ecmascript-6 reactjs
我知道我可以遍历数组并只更改value toLowerCase()。
我很好奇是否有一个reactjs或es6方法可以检查值是否在数组中。
在addTodo函数上。您可以看到我使用了include,但是此方法区分大小写。
这就是我所拥有的
class Todo extends React.Component {
render() {
return (
<div className="todo">
<input type="checkbox" />
<p>{this.props.children}</p>
</div>
);
}
}
class App extends React.Component {
constructor(props) {
super(props);
this.todos = [
'Get Up from bed',
'Eat Breakfast'
];
}
eachTodo(task, i) {
return (
<Todo key={i} index={i}>{task}</Todo>
)
}
addToDo() {
let task_title = this.refs.newTodo.value;
if(task_title !== '') {
let arr = this.todos;
var arr_tlc = this.todos.map((value) => {
return value.toLowerCase();
})
if(arr_tlc.indexOf(task_title.toLowerCase()) === -1) {
arr.push(task_title);
this.setState({
todos: arr
});
}
}
}
render() {
return (
<div className="main-app">
<input ref="newTodo" placeholder="Task"/>
<button onClick={this.addToDo.bind(this)}>Add Todo</button>
<div className="todos">
{this.todos.map(this.eachTodo)}
</div>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激。谢谢!
我建议您使用 aMap而不是数组作为您的待办事项列表。A 的Map优点是它在恒定时间内提供基于键的查找,并且不存储具有相同键的重复条目。然后,您可以使用小写变体作为键,并使用原始(混合大小写)字符串作为该键的值。
您可以定义todos为 aMap而不是数组,并使用小写字符串作为键:
constructor(props) {
super(props);
this.todos = new Map();
this.addToDo('Get Up from bed');
this.addToDo('Eat Breakfast');
}
Run Code Online (Sandbox Code Playgroud)
然后,添加任务变得非常简单,因为Map会覆盖重复项:
addToDo() {
this.todos.set(task_title.toLowerCase(), task_title);
this.setState({
todos: this.todos
});
}
Run Code Online (Sandbox Code Playgroud)
在渲染中,您需要使用Array.from(..., <map-function>),因为.map没有为Map对象定义:
<div className="todos">
{Array.from(this.todos, this.eachTodo)}
</div>
Run Code Online (Sandbox Code Playgroud)
这意味着该eachToDo方法将接收一对字符串(一个数组),而不是一个字符串,并且我们想要显示该对中的第二个,因此使用索引[1]:
eachTodo(task, i) {
return (
<Todo key={i} index={i}>{task[1]}</Todo>
)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5576 次 |
| 最近记录: |