Как удалить элемент из массива с помощью javascript

#javascript #jquery #arrays

#javascript #jquery #массивы

Вопрос:

У меня есть 2 массива, и я хочу удалить элементы 2-го массива в соответствии с номерами позиций в 1-м массиве.

 var notexists = []; //value is "1","5","8" on 0,1,2nd position. 
var copyrequiredfields = [];//Value is "a","b","c","d","e","f",...
for (var i = 0; i < notexists.length; i  ) {
     copyrequiredfields.splice(parseInt(notexists[i]), 1);
}
  

в соответствии с примером я хочу удалить 1-й, 5-й и 8-й элементы из copyrequiredf полей.
Пожалуйста, предложите какой-нибудь ответ.

Комментарии:

1. Вероятно, есть много способов сделать это. Не могли бы вы подробнее рассказать о том, какую общую цель вы пытаетесь достичь? Было бы проще предложить решение, если бы мы знали, почему вы хотели это сделать.

2. Используйте slice , если вы основываете результаты на позиции. Конечно, slice не влияет на исходный массив, как splice это делает. Обратите внимание, что это splice принимает количество, а не позицию.

3. Итак, вы имеете в виду 1-й элемент a ?

4. @Rajesh Да, я имею в виду 1-й элемент

5. @chhaya_patel Я добавил ответ с помощью обоих array.splice и array.filter . Надеюсь, это поможет!

Ответ №1:

Создайте новый массив, выполните итерацию copyrequiredf полей, когда индекс в notexists, игнорируйте его.

пример:

 var notexist = [1,2,5];
var copyrequiredfields = ['a','b','c','d','e','f','g'];
//create a index map
var index_map = {};
for(var i = 0; i < notexist.length; i  ){
    index_map[notexist[i]] = true;
}
//remove the elements
var newarray = [];
for(var i = 0; i < copyrequiredfields.length; i  ){
    if(!index_map[i]){
        newarray.push(copyrequiredfields[i]);
    }
}
copyrequiredfields = newarray;
  

Ответ №2:

В JS индекс массива начинается с 0 и не 1 , поэтому вам просто нужно вычесть 1 из значения перед объединением. Остальная часть кода в порядке.

Одна из проблем заключается в том, что при удалении элементов из массива элементы после него перемещаются на 1 позицию назад. Это даст вам неверный вывод. 1 хак заключается в подсчете количества удаленных элементов для подсчета перемещения.

Лучшим решением было бы использовать array.filter .

Array.splice

 var notexists = ["1", "5", "8"]; //value is  on 0,1,2nd position. 
var copyrequiredfields = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]; //Value is "a","b","c","d","e","f",...
var count=0;
for (var i = 0; i < notexists.length; i  ) {
  console.log( notexists[i] - 1)
  copyrequiredfields.splice( notexists[i]-1-count  , 1);
}

console.log(copyrequiredfields)  

Array.filter

 var notexists = ["1", "5", "8"]; //value is  on 0,1,2nd position. 
var copyrequiredfields = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]; //Value is "a","b","c","d","e","f",...
var r = copyrequiredfields.filter((x,i)=>notexists.indexOf((i 1).toString()) === -1)
console.log(r)  

Ответ №3:

Вы можете скопировать весь массив, за исключением частей, которые вам больше не нужны:

 var tempCopy = [];
for (var i=0; i < copyrequiredfields.length; i  )
    if(notexists.indexOf(i)==-1)
        tempCopy.push(copyrequiredfields[i]);
copyrequiredfields = tempCopy;
  

Приветствует!