javascript 从数组中移除元素并仅返回剩余元素

w9apscun  于 2023-02-02  发布在  Java
关注(0)|答案(6)|浏览(736)

我需要从数组中删除一个元素,并只返回其余的元素。
我尝试使用splicefilter,但无法使其工作。
对于splice,它只返回删除的元素,我需要相反的结果。

var parse_obj = JSON.parse(document.getElementById('imagens').value);
function rImagem(data){
    data = data - 1;
    document.getElementsByClassName("btn_remover")[data].style.display = 'none';
    parse_obj2 = parse_obj.splice(parse_obj.findIndex(e => e.data,1));
    new_string = JSON.stringify(parse_obj2);
    document.getElementById('imagens').value = new_string;
}
tktrz96b

tktrz96b1#

在你的场景中,你可以使用filter来过滤你不想在结果数组中出现的索引,你传入过滤器的回调函数的第一个参数是当前元素ele,第二个参数是当前元素idx的索引:

parse_obj2 = parse_obj.filter((ele, idx) => idx !== parse_obj.findIndex(e => e.data,1));

这里,假设我想移除第三个索引处的元素,所以我会比较过滤函数回调中的当前索引和我想移除的元素的索引,这将产生一个新数组,其中包含原始数组的所有元素,但不包含我想移除其索引的元素。

var indexToRemove = 2; 
var arr = [1, 2, 3, 4, 5];
var result = arr.filter((data, idx) => idx !== indexToRemove );
console.log(result);

通过splice也可以得到同样的结果。

parse_obj.splice(parse_obj.findIndex(e => e.data,1), 1); //parse_obj is one element less.

以下是演示:

var indexToRemove = 2; 
var arr = [1, 2, 3, 4, 5];
arr.splice(indexToRemove, 1); //removes only the third element and modifies the original array in place.
console.log(arr);
uxhixvfz

uxhixvfz2#

Array#splice就是你要找的。问题是,splice没有返回新数组,它从数组中移除元素并返回被删除的元素。然而,在原始数组中,除了被移除的元素外,你将拥有相同的元素。

let array = [1, 2, 3, 4, 5]

console.log(`Array elements before splice: ${array}`);
console.log(`Deleted elements: ${array.splice(1, 2)}`);
console.log(`Array elements after splice: ${array}`);

如果你不想修改原始数组,你可以使用filter:

let array = [1, 2, 3, 4, 5];
let toDelete = [2, 4];

console.log(`Original array elements: ${array}`);
console.log(`Elements to delete: ${toDelete}`);

let newArray = array.filter(n => !toDelete.includes(n));
console.log(`Array elements after splice: ${newArray}`);
flmtquvp

flmtquvp3#

function remove(arr,index){
    return arr.slice(0,index).concat(arr.slice(index+1,9))
    }
    
   // remove(<your array over here>,<the index of the element that you want to remove>) 
   // ex -   
    remove(myarray,0);

"希望这能有所帮助"

hjzp0vay

hjzp0vay4#

嘿,我遇到了一个简单的解决方案,没有使用splice()使用解构。

const myArr = [1,2,3,4,5,6,7,8,9,10];

function removeFirst(array){
const [a, ...arr] = array; //a is never returned
return arr;
}
ymzxtsji

ymzxtsji5#

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
    var filtered = array.filter(function(value, index, arr){ 
        return value > 5;
    });
    //filtered => [6, 7, 8, 9]
    //array => [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
w8rqjzmb

w8rqjzmb6#

所有你需要的是知道如何使用拼接。希望下面的回答你的问题。

const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// Inserts at index 1
console.log(months);
// Expected output: Array ["Jan", "Feb", "March", "April", "June"]

months.splice(4, 1,"May");
// Replaces 1 element at index 4
console.log(months);
// Expected output: Array ["Jan", "Feb", "March", "April", "May"]

months.splice(4, 1);
// Replaces 1 element at index 4
console.log(months);
// Expected output: Array ["Jan", "Feb", "March", "April" ]

相关问题