【问题标题】:Getting values from array that matches a regular expression using lodash使用 lodash 从与正则表达式匹配的数组中获取值
【发布时间】:2016-05-31 13:42:38
【问题描述】:

我的 json 数组:

[{"id":"7","name":"hello"},{"id":"7","name":"shan"},{"id":"7","name":"john"}
{"id":"7","name":"hello"}]

我想获得一个与name 上以字母开头的正则表达式匹配的新数组。

我正在使用regexp,但我不知道如何实现它。

这是我的代码:

var newitem=_.filter(result,item=>item.name='hello');
 console.log(newitem);

但它只返回 name 的严格匹配。

请帮我修改上面的,以便结果是一个新的数组。

预期输出

当用户输入字母 h 时,它只显示行

{"id":"7","name":"hello"}

【问题讨论】:

  • 过滤name任意字母开头的元素?
  • 请注意,item.name='hello' 将分配字符串值。您需要使用=====
  • 不应期望输出包含两个对象,因为有两个对象的nameh 开头。

标签: javascript json regex lodash


【解决方案1】:

要检查name 是否以字符串开头,您可以将RegExp#test 与正则表达式一起使用。

var newItem = _.filter(result, obj => /^[a-zA-Z]/.test(obj.name));

正则表达式^[a-zA-Z] 将检查名称是否以字母开头。

var arr = [{
    "id": "7",
    "name": "hello"
}, {
    "id": "7",
    "name": "shan"
}, {
    "id": "7",
    "name": "jhon"
}, {
    "id": "7",
    "name": "hello"
}, {
    id: 10,
    name: '$haun'
}];

var newItem = _.filter(arr, obj => /^[a-zA-Z]/.test(obj.name));
console.log(newItem);
<script src="https://cdnjs.com/libraries/lodash.js/"></script>

可以使用Array#filter 编写相同的代码。

arr.filter(obj => /^[a-zA-Z]/.test(obj.name));

var arr = [{
    "id": "7",
    "name": "hello"
}, {
    "id": "7",
    "name": "*shan"
}, {
    "id": "7",
    "name": "jhon"
}, {
    "id": "7",
    "name": "hello"
}, {
    id: 10,
    name: '$haun'
}];

var newItem = arr.filter(obj => /^[a-zA-Z]/.test(obj.name));
console.log(newItem);
document.body.innerHTML = '<pre>' + JSON.stringify(newItem, 0, 4) + '</pre>';

更新:

当用户输入字母 h 时,它只显示行

你可以使用

_.filter(result, obj => /^h/.test(obj.name));

使用i-case insensitive 标志来匹配字母表而不考虑大小写。这将匹配hH

【讨论】:

  • 但它会返回所有行
  • @BlessanKurien 你说我想得到一个新数组,它匹配以字母开头的名称的正则表达式。 对。预期输出是什么?
  • @BlessanKurien 是否要过滤名称以h 开头的对象,则只需使用/^h/ 正则表达式。使用i 标志不区分大小写,即hH
  • 用预期的输出更新了我的问题
  • 我在 lodash 库中询问正则表达式 lodash.com/docs#isRegExp
【解决方案2】:

regex ('^h.') 应该可以解决这个问题。获取名称为 h 的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 2013-09-18
    • 2020-04-11
    • 1970-01-01
    • 2015-09-03
    相关资源
    最近更新 更多