Luc*_*nik 4 javascript arrays algorithm array-splice
我有两个数组。第一个是索引数组,第二个是对象数组。它们看起来像这样:
var nums = [0, 2];
var obj = [Object_1, Object_2, Object_3];
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,我需要删除obj除obj[0]and之外的所有 " " 元素obj[2]。所以结果将如下所示:
obj = [Object_2]
Run Code Online (Sandbox Code Playgroud)
也有可能出现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
}
});
});
Run Code Online (Sandbox Code Playgroud)
问题:如何删除不符合我的条件的元素?我不需要新数组,我想修改现有的“obj”数组。我怎样才能实现这个功能?或者我应该使用其他一些技术?
小智 5
您可以使用过滤器来执行此操作,假设nums是要保留的元素索引的数组。
obj = obj.filter((o, i) => nums.indexOf(i) > -1);
Run Code Online (Sandbox Code Playgroud)
您可以检查索引的长度是否与对象数组的长度相同,并返回或删除给定索引处的对象。
它需要一个排序的索引数组,因为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);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)