【问题标题】:React splice returns opposite of what I delete?反应拼接返回与我删除的相反?
【发布时间】:2020-11-20 15:35:44
【问题描述】:

我正在尝试删除数组的前两个、三个、四个索引。这是我的代码:

 returnFilteredRoles() {
    if (this.props.user.role_id == 1 || this.props.user.role_id == 2) {
      return this.state.data;
    } else if (this.props.user.role_id == 3) {
      return this.state.data.splice(0, 2);
    } else if (this.props.user.role_id == 4) {
      return this.state.data.splice(0, 3);
    } else if (this.props.user.role_id == 5) {
      return this.state.data.splice(0, 4);
    }
  }

例如:data = [1,2,3,4,5]if role_id == 3,它应该返回[3,4,5]。相反,它返回[1,2]。不知道为什么。

我尝试将状态存储到一个变量中,然后拼接该变量并返回它。但它给出了相同的结果。

【问题讨论】:

  • 切片的参数是start and end index。如果起始索引为 0,您将获得从第一项开始的数组的一部分。你所有的切片都从零开始,所以你从数组的开头得到一个块。
  • 我在教程中读到,第一个参数是起始索引,第二个是要删除的项目数。感谢您的澄清。
  • slicesplice 是两个不同的东西。 splice 获取要删除的项目数。 slice 没有。
  • 好的,但不知何故 splice 返回的结果与我想要的相反。可能是因为它是一个可变方法,直接影响状态,但是将它存储在变量中也不起作用。
  • splice 修改数组并返回删除的项。 slice 返回一个包含所选子集的新数组。在您进行编辑之前,您调用的是 slice。

标签: javascript arrays reactjs slice splice


【解决方案1】:

slice() 不会改变数组,它会返回一个包含所选元素的新数组。但是,splice() 会改变数组 因此,您的示例可以使用 slice 来工作

data = [1,2,3,4,5]; 
var slicedata=data.slice(2,)
console.log("sliced array", slicedata)
console.log("original array", data)

使用splice

    data = [1,2,3,4,5]; 
    var slicedata=data.splice(2,4)
    console.log("spliced array", slicedata)
    console.log("original array", data) // notice the difference

【讨论】:

    【解决方案2】:

    问题是,该切片返回您剪切的元素:

    var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
    var citrus = fruits.slice(1, 3);
    console.log(citrus); // ["Orange", "Lemon"]
    

    来源:https://www.w3schools.com/jsref/jsref_slice_array.asp

    【讨论】:

    • 使用 slice 可以解决问题,因为它不会直接影响数组。但我不知道为什么 splice() 给出的结果与我的预期相反。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多