Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从数组中删除除特定元素之外的元素_Javascript_Arrays_Algorithm_Array Splice - Fatal编程技术网

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,那么我建议迭代
对象
,获取索引的最大值并检查实际索引,然后在必要时拼接。