javascript - 仅更改数组元素 3 次,重复
问题描述
根据数组的长度更改数组的每个元素的最佳方法是什么?
例如:
User #1 input = "XYZVC"
Expected Output = "BLABL"
User #2 input = "XYZVCAD"
Expected Output = "BLABLAB"
我要换,B
换index[0]
,L
换。如果用户输入长于 3,我最苦恼的部分也是让它重复。index[1]
A
index[2]
我的尝试
我尝试split()
将输入输入到一个数组中,shift()
然后将其输入到push()
一个新数组中,但没有任何运气。
我在下面的代码中粘贴了更多详细信息:
import React from 'react'
class UserInput extends React.Component {
constructor(props) {
super(props);
this.state = {
value: ''
};
}
handleChange = (event) => {
this.setState({value: event.target.value})
}
handleSubmit = (event) => {
alert('Your input has been submitted: ' + this.state.value)
event.preventDefault()
}
badRobot = () => {
//Check length of user input
//Add B, L, A, matching the length of the user input
//Store it within a new variable
//Plug that into the bad robots output
let checkedInput = this.state.value
let checkedArray = checkedInput.split('')
const newArr = checkedInput.shift()
}
render(){
return(
<div>
<form onSubmit={this.handleSubmit}>
<label>
<p>Say Something</p>
<input type="text" value={this.state.value} onChange={this.handleChange} />
</label>
<input type="submit" value="Submit" />
</form>
<div>
<h3>Good Robot</h3>
<p>I hear you saying {this.state.value}. Is that correct?</p>
<h3>Bad Robot</h3>
<p>.</p>
<h3>Kanyebot 5000</h3>
<p>I'm gonna let you finish but Beyonce is {this.state.value}.</p>
</div>
</div>
)
}
}
export default UserInput
解决方案
更新
事实证明,有一个字符串函数padStart(也可以与 padEnd 一起使用)可以很容易地做到这一点:
const input1 = "XYZVCAD"
const input2 = "erkjguherkluagheruhg"
function mask(str){
return ''.padStart(str.length, 'BLA');
}
console.log(mask(input1))
console.log(mask(input2))
实现它的一种方法是使用该repeat
函数,然后根据原始字符串长度剪切字符串:
const input1 = "XYZVCAD"
const input2 = "erkjguherkluagheruhg"
function mask(str){
return 'BLA'.repeat(str.length / 3 + 1).substring(0, str.length)
}
console.log(mask(input1))
console.log(mask(input2))
正如您将在上面链接的文档中看到的那样,该repeat
函数将重复您的字符串时间。x
在这里,由于您的字符串长度为 3 个字符,因此我们只需要根据原始字符串的长度除以 3 来重复您的字符串。我要添加一个,因为像这样的除法5/3
将四舍五入1
,导致BLA
即使您的字符串是更长。
最后一步,substring
将简单地将您的字符串切割成与原始字符串完全相同的长度。
这是实现它的另一种方法,通过将字符串拆分为数组,并使用模运算符给它正确的字母:
const input1 = "XYZVCAD"
const input2 = "erkjguherkluagheruhg"
function mask(str){
return str.split('').map((ch, index) => 'BLA'[index % 3]).join('')
}
console.log(mask(input1))
console.log(mask(input2))
推荐阅读
- google-maps-api-3 - 为什么 Circle 在 react-google-maps 中恢复它的半径?
- php - php下载警告:“不常下载,可能很危险”
- nlp - LDA 和 Word2vec 与聚类词的相似性
- reactjs - OpenLayers 5点击功能没有找到它,但点击功能下方
- swift - 如何检查为什么视图控制器在没有请求的情况下被解雇
- java - 不断收到 java.sql.SQLException:没有合适的驱动程序,错误,但我的连接器在正确的文件夹中
- c# - 为什么 ASP.Net Web 窗体控件必须调用其自己的 DataBind 来获取其父标记中定义的绑定?
- azure - AWX docker:如何使用 Active Directory 向 Azure 进行身份验证。对我不起作用
- javascript - 是否可以使用比 ' 和 " 更多的引号?
- c# - 错误:XX 处的 0x1:调用目标已引发异常