数组过滤去掉相同元素


#import <Foundation/Foundation.h>


@interface NSMutableArray (FilterElement)

/**

 *   过滤掉相同的元素

 *

 *   @return 返回一个数组

 */

- (NSMutableArray*)filterTheSameElement;

@end

#import "NSMutableArray+FilterElement.h"


@implementation NSMutableArray (FilterElement)

/**

 *   过滤掉相同的元素

 *

 *   @return 返回一个数组

 */

- (NSMutableArray*)filterTheSameElement

{

    NSMutableSet *set = [NSMutableSet set];

    for (NSObject *obj in self) {

        [set addObject:obj];

    }

    [self removeAllObjects];

    for (NSObject *obj in set) {

        [self addObject:obj];

    }

    return self;

}


@end



在 JavaScript 中,有多种方法可以从两个数组中分别去除相同元素,以下是几种常见的实现方式: ### 方法一:使用双重循环和空字符串赋值 这种方法通过双重循环遍历两个数组,当找到相同元素时,将该元素赋值为空字符串,最后过滤空字符串元素得到新数组。 ```javascript let arr01 = [1, 2, 3]; let arr02 = [2, 3, 4]; let newArr = []; // 遍历两个数组,并判断数值是否相等,如果相等,就将空字符串赋值给该数值 for (var i = 0; i < arr01.length; i++) { for (var j = 0; j < arr02.length; j++) { if (arr01[i] == arr02[j]) { arr01[i] = ""; arr02[j] = ""; break; } } } // 然后将数组中的非空元素添加到newArr for (var i = 0; i < arr01.length; i++) { if (arr01[i] != '') { newArr.push(arr01[i]); } } for (var j = 0; j < arr02.length; j++) { if (arr02[j] != '') { newArr.push(arr02[j]); } } console.log(newArr); ``` 这种方法的核心在于遍历两个数组,找到相同元素并标记为空字符串,最后过滤标记元素。[^1] ### 方法二:使用 `some()` 和 `filter()` 方法 `some()` 方法用于检测数组中是否有元素满足指定条件,`filter()` 方法用于创建一个新数组,其包含通过所提供函数实现的测试的所有元素。 ```javascript const arr1 = [1, 2, 3, 56]; const arr2 = [1, 2, 3, 780]; const res = arr2.filter(item1 => !arr1.some(item2 => item2 === item1)); const res2 = arr1.filter(item1 => !arr2.some(item2 => item2 === item1)); const newArray = res.concat(res2); console.log(newArray); ``` 对于数组对象,同样可以使用这种方法,例如查找对象 `id` 属性: ```javascript let arr1 = [ { id: 1, name: '小明', age: 18 }, { id: 2, name: '小红', age: 16 }, { id: 4, name: '小紫', age: 22 }, { id: 5, name: '小绿', age: 20 }, ]; let arr2 = [ { id: 2, sex: '女' }, { id: 5, sex: '男' }, ]; let newArr1 = arr1.filter((item) => !arr2.some((ele) => ele.id === item.id)); let newArr2 = arr2.filter((item) => !arr1.some((ele) => ele.id === item.id)); let finalArr = newArr1.concat(newArr2); console.log(finalArr); ``` 这种方法利用了数组方法的特性,代码更加简洁高效。[^2] ### 方法三:使用 `includes()` 方法 `includes()` 方法用于判断一个数组是否包含一个指定的值,如果包含则返回 `true`,否则返回 `false`。 ```javascript var arr1 = ['a', 'b', 'c']; var arr2 = ['a', 'b', 'c', 'd']; let list1 = arr1.filter(items => !arr2.includes(items)); let list2 = arr2.filter(items => !arr1.includes(items)); let result = list1.concat(list2); console.log(result); ``` 这种方法通过 `includes()` 方法判断元素是否存在于另一个数组中,然后过滤相同元素。[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值