我想知道是否有办法在不制作数组的完整副本的情况下执行此操作,然后拼接副本。
var arr = [{id:1, name:'name'},{id:2, name:'name'},{id:3, name:'name'}];
我需要通过索引临时删除元素并使用没有此元素的数组,但我不想更改原始数组。
你甚至可以用lodash给我路。
答案 0 :(得分:12)
Array.prototype.filter
将创建并返回一个由与谓词匹配的元素组成的新数组。
function removeByIndex(array, index) {
return array.filter(function (el, i) {
return index !== i;
});
}
ECMAScript 6更短:
var removeByIndex = (array, index) => array.filter((_, i) => i !== index);
答案 1 :(得分:0)
您可以使用es6 spread operator和Array.prototype.splice
var arr = [{id:1, name:'name'},{id:2, name:'name'},{id:3, name:'name'}];
let newArr = [...arr]
newArr.splice(index)
spread运算符复制数组并拼接changes the contents of an array by removing or replacing existing elements and/or adding new elements
答案 2 :(得分:0)
var arr = [{id:1, name:'name'},{id:2, name:'name'},{id:3, name:'name'}];
var index = 1;
var result = Array.prototype.concat(arr.slice(0, index), arr.slice(index + 1, arr.length));
它将合并数组的左右部分,此处的分隔符是您要删除的元素。
答案 3 :(得分:0)
在我看来,使用散布运算符似乎是删除不带突变的数组元素的更好选择:
let fruits = ['peach', 'pear', 'apple', 'plum'];
let result = [...fruits.slice(0, 2), ...fruits.slice(3)];
console.log(fruits); // ['peach', 'pear', 'apple', 'plum']
console.log(result); // ['peach', 'pear', 'plum']