#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;
Приветствует!