【问题标题】:Unable to remove element from array in typescript无法从打字稿中的数组中删除元素
【发布时间】:2019-03-02 01:03:07
【问题描述】:

我有字符串数组

我想要做的是我想在 oneArr 和 twoArr 中找到匹配的 dataArr 元素并想要删除它。

这是我尝试过但无法正常工作的代码:

dataArr = ["1","3","9"];
oneArr  = ["1","2","5"];
twoArr  = ["4","9"];

 updateData(dataArr){
 for (let index = 0; index < dataArr.length; index++) {

            let orgIndx = oneArr.findIndex(dataArr[index]);
            oneArr.splice(orgIndx,1);

            let orgIndx1 = twoArr.findIndex(dataArr[index]);
            twoArr.splice(orgIndx1,1);

}
console.log("oneArr = "+oneArr);
console.log("twoArr = "+twoArr);

我在哪里做错了,请帮忙

【问题讨论】:

  • 为什么[android]标签

标签: angular for-loop logic


【解决方案1】:

如下使用filter

var dataArr = ["1","3","9"];
var oneArr  = ["1","2","5"];
var twoArr  = ["4","9"];

oneArr = oneArr.filter( e => dataArr.indexOf(e) == -1);
twoArr = twoArr.filter( e => dataArr.indexOf(e) == -1);

console.log("oneArr = "+oneArr);
console.log("twoArr = "+twoArr);

【讨论】:

【解决方案2】:

splice 方法不影响当前数组,它返回一个新数组。

例如(取自MDN):

var myFish = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon'];
var removed = myFish.splice(3, 1);

// removed is ["mandarin"]
// myFish is ["angel", "clown", "drum", "sturgeon"]

你需要做这样的事情:

updateData(dataArr){
  const newArrOne = [];
  const newArrTwo = []
  for (let index = 0; index < dataArr.length; index++) {
    let orgIndx = oneArr.findIndex(dataArr[index]);
    newArray = oneArr.splice(orgIndx,1);

    let orgIndx1 = twoArr.findIndex(dataArr[index]);
    newArrTwo = twoArr.splice(orgIndx1,1);
  }

  console.log(newArrOne);
  console.log(newArrTwo);
}

请注意,上面的代码远非生产代码,只是基于您提供的代码。

您也可以使用 Harunur Ra​​shid 解释的过滤方法

【讨论】:

    【解决方案3】:
    for (var index = 0; index < dataArr.length; index++) {
      let orgIndx = oneArr.indexOf(dataArr[index]);
      if (orgIndx >= 0) oneArr.splice(orgIndx, 1);
    
      let orgIndx1 = twoArr.indexOf(dataArr[index]);
      if (orgIndx1 >= 0) twoArr.splice(orgIndx1, 1);
    }
    

    【讨论】:

      【解决方案4】:

      您犯的错误是,您将字符串作为参数传递给 findIndex 函数,但它需要一个函数作为参数。见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex

      如果你想修复你当前的代码,即使用查找索引,你可以这样做:

      updateData(dataArr){
           for (let index = 0; index < dataArr.length; index++) {
      
                      let orgIndx = oneArr.findIndex((element)=>{
                           return element==dataArr[index]
                      });
      
                      if(orgIndx!=-1)
                      oneArr.splice(orgIndx,1);
      
                      let orgIndx1 = twoArr.findIndex((element)=>{
                          return element==dataArr[index]
                      });
                      if(orgIndx1!=-1)
                      twoArr.splice(orgIndx1,1);
      
          }
      }
      

      在上面的例子中,我修改了你的逻辑,通过提供一个函数作为参数给 findIndex 函数,并且在拼接之前检查 index=-1 因为如果在数组中没有找到满足条件的元素 findIndex 返回 -1函数通过。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-20
        • 2021-09-01
        • 2019-07-03
        • 2023-03-19
        • 2018-08-20
        • 1970-01-01
        • 2020-11-29
        相关资源
        最近更新 更多