Javascript 从数组中删除除特定元素之外的元素
我有两个数组。第一个是索引数组,第二个是对象数组。它们看起来像这样:Javascript 从数组中删除除特定元素之外的元素,javascript,arrays,algorithm,array-splice,Javascript,Arrays,Algorithm,Array Splice,我有两个数组。第一个是索引数组,第二个是对象数组。它们看起来像这样: var nums = [0, 2]; var obj = [Object_1, Object_2, Object_3]; obj = [Object_2] 在这种特殊情况下,我需要删除所有“obj”元素,除了obj[0]和obj[2]。结果如下所示: var nums = [0, 2]; var obj = [Object_1, Object_2, Object_3]; obj = [Object_2] 当nums=[
var nums = [0, 2];
var obj = [Object_1, Object_2, Object_3];
obj = [Object_2]
在这种特殊情况下,我需要删除所有“obj
”元素,除了obj[0]
和obj[2]
。结果如下所示:
var nums = [0, 2];
var obj = [Object_1, Object_2, Object_3];
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”数组。如何实现此功能?或者我应该使用其他技术吗?您可以通过过滤器来实现这一点,假设
nums
是一个数组,它包含要保留的元素的索引
obj = obj.filter((o, i) => nums.indexOf(i) > -1);
如果要保留相同的数组对象,则需要使用
拼接
,例如,对使用简单的反向,以避免弄乱索引:
for (var i=obj.length-1; i>=0; i--) {
if (nums.indexOf(i) < 0) {
obj.splice(i, 1);
}
}
然后使用sortedNums检查索引的您可以检查索引的长度是否与对象数组的长度相同,并返回或删除给定索引处的对象
它需要索引的排序数组,因为数组的长度会改变。(对于具有降序排序索引的数组,可以使用代替。)
函数变化(对象、索引){
if(objects.length==index.length){
返回;
}
索引.还原右(函数(u,i){
对象.拼接(i,1);
},空);
}
var对象=[{o:1},{o:2},{o:3}];
变异(对象[0,1,2]);//保留所有物品
console.log(对象);
objects=[{o:1},{o:2},{o:3}];//删除索引0和2处的项目
变异(对象[0,2]);
console.log(对象)代码>
.as console wrapper{max height:100%!important;top:0;}
为什么在第一种情况下删除给定的索引,而在第二种情况下则相反?我同意@NinaScholz的观点,第二种情况不应该是nums=[]
OP提到的不需要新数组这不会创建新数组,它过滤现有的onefilter返回一个新的数组-请参阅“是”中的第一行,它确实返回了,但我认为在这个问题中不需要新数组意味着OP不需要一个存储另一个数组的新变量。如果OP需要数组是完全相同的数组,那么我的答案是不正确的。这个答案从2个变量包含数组开始,以同样的2个变量包含数组结束;让同一个变量引用指向一个新对象并不是一个真正值得考虑的用例(它的意义是什么?),但是维护同一个对象可能很重要-取决于对象的用途,相反呢?如果要在指定的索引(如[0,2])处保存项目并删除1索引下的元素?使用哪个函数代替reduceRight()更好?抱歉打扰了)@Luchnik,那么我建议迭代对象
,获取索引的最大值并检查实际索引,然后在必要时拼接。