Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 减少不删除正确的数组项_Javascript_Arrays_Regex_Reactjs_Underscore.js - Fatal编程技术网

Javascript 减少不删除正确的数组项

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

编辑1

将代码缩短为

  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
是我要从数组中删除的项的ID
templateContents
。每次我按下其中一个项目的“删除”按钮时,它似乎总是删除最后一个项目,而忽略其他项目

我已经用
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
  }
}