js数组筛选出匹配指定字符串的元素,获得新数组

可以使用 JavaScript 中的正则表达式和 filter 方法来筛选出匹配指定字符串的元素,然后生成一个新的数组

const array = [
  { name: 'Alice' },
  { name: 'Bob' },
  { name: '张三四' },
  { name: '李四五' },
  { name: '王四五' },
];

const searchStr = '四五'; // 指定的字符串

const regex = new RegExp(`(${searchStr})`, 'u'); // 创建包含指定字符串的正则表达式

const filteredArray = array.filter(item => regex.test(item.name));

console.log(filteredArray);

在上述代码中,我们定义了一个包含 name 属性的数组 array,其中包含了各种名称,包括包含"四五"的中文字符串。

指定要搜索的字符串 searchStr,然后使用 RegExp 构造函数创建一个正则表达式。通过在正则表达式中使用括号和竖线 | 分隔多个字符串,可以指定多个匹配条件。

我们还需要传递 'u' 参数来启用 Unicode 匹配,以支持中文字符的匹配。

然后,我们使用 filter 方法遍历数组中的每个元素,并使用 test 方法来检查 name 属性是否满足正则表达式的条件。

最后,我们将满足条件的元素存储在 filteredArray 数组中,并打印出来。

运行以上代码,将会输出包含匹配的元素数组,例如:

[
  { name: '李四五' },
  { name: '王四五' }
]

### JavaScript 中两个数组之间的匹配方法 在 JavaScript 中,可以通过多种方式来对比和匹配两个数组的内容。以下是几种常见的方法: #### 使用 `filter` 和 `includes` 这种方法适用于简单的数据结构,比如字符串或数值类型的数组。通过组合使用 `array.filter()` 和 `array.includes()` 可以轻松找存在于一个数组但不在另一个数组中的元素。 ```javascript const arr1 = [1, 2, 3, 4]; const arr2 = [3, 4, 5, 6]; // 找只存在於 arr1 而不存在于 arr2 的元素 let diff = arr1.filter(x => !arr2.includes(x)); console.log(diff); // 输: [1, 2] ``` 此代码片段展示了如何利用这两个内置函数快速筛选差异项[^2]。 #### 处理对象数组的情况 当处理的对象不是基本类型而是复杂对象时,则需要更复杂的逻辑来进行比较。可以先提取对象的关键属性作为唯一标识符再进行过滤操作。 ```javascript var arr1 = [ {id: 1, name: "Alice"}, {id: 2, name: "Bob"} ]; var arr2 = [{id: 1}]; // 提取 id 属性形成新的列表用于查找 var idsInArr2 = arr2.map(item => item.id); // 过滤掉那些 ID 存在于第二个数组里的项目 var result = arr1.filter(function (item) { return idsInArr2.indexOf(item.id) === -1; }); console.log(result); // 结果应该是只有 Bob 的记录被保留下来 ``` 这段脚本实现了从第一个数组中移除任何其ID也现在第二个数组内的条目[^4]。 #### 利用 Set 数据结构提高效率 对于大型数组来说,频繁调用 `indexOf` 或者 `includes` 效率较低。此时可考虑将其中一个集合转成 `Set` 来加速查询过程。 ```javascript function getDifference(setA, setB){ return [...setA].filter(x => !setB.has(x)); } let setA = new Set([1, 2, 3]); let setB = new Set([2, 3, 4]); console.log(getDifference(setA,setB)); // [1] ``` 上述例子定义了一个辅助函数用来计算两者的差集,并且采用了 ES6 引入的新特性——`Set` 类型,它能显著提升性能特别是在大数据量的情况下[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值