javascript – 从数组中删除除特定元素之外的元素
作者:互联网
我有两个数组.第一个是索引数组,第二个是对象数组.它们看起来像这样:
var nums = [0, 2];
var obj = [Object_1, Object_2, Object_3];
在这种特殊情况下,我需要删除除obj [0]和obj [2]之外的所有“obj”元素.所以结果看起来像这样:
obj = [Object_2]
当nums = [0,1,2]和obj = [Object_1,Object_2,Object_3]时,也可能出现这种情况;在那种情况下,我不需要删除任何元素.
“obj”长度始终大于“nums”长度.
所以我开始只找到需要保存的元素:
nums.forEach(function(key) {
obj.forEach(function(o, o_key) {
if (key === o_key) {
console.log(key, o);
// deleting remaining elements
}
});
});
问题:如何删除不符合我条件的元素?我不需要新的数组,我想修改现有的“obj”数组.我该如何实现此功能?或者我应该使用其他技术吗?
解决方法:
您可以检查索引的长度是否与对象数组的长度相同,并返回或删除给定索引处的对象.
它需要一个排序的索引数组,因为Array#splice
会改变数组的长度. (对于具有降序排序索引的数组,可以使用Array#forEach
而不是Array#reduceRight
.)
function mutate(objects, indices) {
if (objects.length === indices.length) {
return;
}
indices.reduceRight(function (_, i) {
objects.splice(i, 1);
}, null);
}
var objects = [{ o: 1 }, { o: 2 }, { o: 3 }];
mutate(objects, [0, 1, 2]); // keep all items
console.log(objects);
objects = [{ o: 1 }, { o: 2 }, { o: 3 }]; // delete items at index 0 and 2
mutate(objects, [0, 2]);
console.log(objects);
.as-console-wrapper { max-height: 100% !important; top: 0; }
标签:array-splice,javascript,arrays,algorithm 来源: https://codeday.me/bug/20190823/1700236.html