Javascript 减少不删除正确的数组项
编辑1 将代码缩短为Javascript 减少不删除正确的数组项,javascript,arrays,regex,reactjs,underscore.js,Javascript,Arrays,Regex,Reactjs,Underscore.js,编辑1 将代码缩短为 removeContentNew(i) { var contents = this.state.templateContent; contents.splice(i, 1); this.setState({ templateContent: contents }); } 这可能与此有关: componentDidMount() { this.setState({ templateContent: this.props.templ
removeContentNew(i) {
var contents = this.state.templateContent;
contents.splice(i, 1);
this.setState({ templateContent: contents });
}
这可能与此有关:
componentDidMount() {
this.setState({ templateContent: this.props.template.content });
}
仍在删除屏幕上的错误内容。当我记录状态时,它确实给了我正确的数组。也许地图有问题
--
我试图修复这段代码,但似乎找不到错误
removeContent(i) {
var $formgroup = false;
const regex = new RegExp('^content.', 'i'),
contents = _.reduce(_.keys(this.refs), (memo, k) => {
if (regex.test(k) && k !== 'content.' + i) {
var $formgroup = $(this.refs[k]);
if (this.props.customer.getSetting('wysiwyg_enabled', true)) {
var html = CKEDITOR.instances['html_' + i].getData();
} else {
var html = $formgroup.find('[name="html"]').val();
}
memo.push({
subject: $formgroup.find('[name="subject"]').val(),
html: html,
text: $formgroup.find('[name="text"]').val(),
language: $formgroup.find('[name="language"]').val()
});
}
return memo;
}, []);
this.setState({ templateContent: contents });
}
i
是我要从数组中删除的项的IDtemplateContents
。每次我按下其中一个项目的“删除”按钮时,它似乎总是删除最后一个项目,而忽略其他项目
我已经用k
变量做了一些测试,这可能是问题的原因,但我一点也不确定
我对RegExp的做事方式真的很陌生
有没有办法解决这个问题?问题在于数组的映射。我将把这个留在这里,因为它帮助我解决了我的问题 坏的(通常)
{rows.map((row,i)=>{
返回;
})}
这可以说是在迭代过程中最常见的错误
在反应中排列。这种方法可以很好地工作,除非元素
从行数组中添加或删除。如果您正在迭代
如果是静态的,那么这是完全有效的(例如数组
导航菜单中的链接数)。看一看这个细节
官方文件的解释
在
constructor
中更新您的状态,而不是在componentDidMount
方法中更新状态
constructor(pops) {
super(props);
this.state = {
templateContent: this.props.template.content
}
}
对setState的调用也是异步的,因此在执行更改时没有任何安全性您希望正则表达式测试什么?是否有任何值以内容开头,后跟任何字符?或者任何以内容开头,后跟点的值?我认为第二个选项没有意义,因为你得到了对象中属性的名称,因为点是一个访问操作符,k没有点character@Raulucco正则表达式已过时-请参见编辑。我不知道为什么在本例中使用regex…我认为您不需要输入if语句,因为
k
作为属性名称不会包含点字符。尝试检查k=='content'&&&&&&&.isObject(this.refs[k])&&&&&~.isUndefined(this.refs[k][i])
您可以使用!\。isNull(u.get(this.refs[k,i],null))
,我认为更重要readable@JorenPolfliet删除数组的最后一项意味着splice()
将获取最后一项或-1。状态正在正确更新,但array.map没有更新,这是什么意思?您在哪里使用array.map?并检查发送到函数的参数i
。
constructor(pops) {
super(props);
this.state = {
templateContent: this.props.template.content
}
}