我需要从数组中删除一个元素并只返回剩余的元素。
我试着用splice和filter,但它不能去工作。
随着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;
}
Run Code Online (Sandbox Code Playgroud)
Ful*_*Guy 12
在您的场景中,您可以使用filter它来过滤结果数组中不需要的索引。您在过滤器中传递的回调的第一个参数是当前元素ele,第二个参数是当前元素的索引idx:
parse_obj2 = parse_obj.filter((ele, idx) => idx !== parse_obj.findIndex(e => e.data,1));
Run Code Online (Sandbox Code Playgroud)
在这里,假设我想删除第三个索引处的元素,因此我会将过滤器函数回调中的当前索引与我要删除的元素的索引进行比较。它将产生一个新数组,其中包含原始数组的所有元素,但不包含我要删除其索引的元素。
parse_obj2 = parse_obj.filter((ele, idx) => idx !== parse_obj.findIndex(e => e.data,1));
Run Code Online (Sandbox Code Playgroud)
也可以得到同样的结果splice。
parse_obj.splice(parse_obj.findIndex(e => e.data,1), 1); //parse_obj is one element less.
Run Code Online (Sandbox Code Playgroud)
这是演示:
var indexToRemove = 2;
var arr = [1, 2, 3, 4, 5];
var result = arr.filter((data, idx) => idx !== indexToRemove );
console.log(result);Run Code Online (Sandbox Code Playgroud)
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}`);Run Code Online (Sandbox Code Playgroud)
不过,如果您不想修改原始数组,则始终可以使用过滤器:
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}`);Run Code Online (Sandbox Code Playgroud)