开发者问题收集

Reactjs-无法从数组中获取值,未定义

2019-03-10
519

我尝试比较两个状态数组的值,但当我查看 otherItems[i] 的值时,我得到的是 undefined 。需要澄清的是, Items 是一个包含许多数据点的对象数组,这就是为什么我用 .name 来调用它,而 otherItems 只是一个名称数组。如果我只调用 this.state.otherItems ,那么我将获得完整的数组内容。

this.state = {
  Items: [],
  otherItems: [],
  ...
}
...
function = () => {
  var total = this.state.total;
  var i;
  for(i = 0; i < this.state.Items.length; i++) {
    console.log(this.state.otherItems[i]);
    if(this.state.Items[i].name === this.state.otherItems[i]) {
      total += parseFloat(this.state.Items[i].price)
    }
  }
  this.setState({Total: total})
}

我希望发生的是比较两个数组中的项目,并且当且仅当 Items 中的项目 i 存在于 otherItems 中时,项目的价格才会添加到总和中。

1个回答

您正在使用循环变量 i 并使用它来索引两个数组,因此您只比较两个数组之间具有相同索引的元素,并且两个数组的长度可能不同。

您可以改用 includes 来检查 Items 中元素的 name 是否存在于 otherItems 数组中。

getTotal() {
  this.setState(({ total = 0, Items, otherItems }) => {
    Items.forEach(item => {
      if (this.state.otherItems.includes(item.name)) {
        total += parseFloat(item.price);
      }
    });

    return { otherTotal: total };
  });
}
Tholle
2019-03-10