Невозможно удалить элемент из массива в машинописи - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть массив строк

Я хочу найти соответствующий элемент dataArr в oneArr и twoArr и удалить его.

Вот мой код, который у меня естьпопробовал, но не работает:

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);

Где я делаю mistke, пожалуйста, помогите

Ответы [ 4 ]

0 голосов
/ 26 сентября 2018

Ошибка, которую вы делаете, заключается в том, что вы передаете строку в функцию 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, а также проверив, равен ли индекс = -1, перед объединением, поскольку findIndex возвращает -1, если в массиве не найдено ни одного элемента, удовлетворяющего условию переданной функции.

0 голосов
/ 26 сентября 2018

Метод 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);
}

Обратите внимание, что приведенный выше код далеко не рядом с рабочим кодом, он основан только на предоставленном вами коде.

Вы также можете использоватьметод фильтра, как объяснил Харунур Рашид

0 голосов
/ 26 сентября 2018
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);
}
0 голосов
/ 26 сентября 2018

Используйте 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...