编程语言
首页 > 编程语言> > javascript – 从数组中删除除特定元素之外的元素

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