gpt4 book ai didi

javascript - 如何仅过滤显示的元素? (不要过滤$$hashKey)

转载 作者:行者123 更新时间:2023-12-03 05:31:40 24 4
gpt4 key购买 nike

对象:

    Object
$$hashKey: "object:25"
id: 1
category: "Fruit"
name: "Apple"
color: "red"
__proto__: Object

Javascript( CoffeeScript ):

    $scope.fruits = [
{id: 1, category: "Fruit", name: "Apple", color: "red"}
]

HTML:

    <input type="search" ng-model="fruitSearch"/>


<div ng-repeat="i in filtro = (fruits | scFilter:fruitSearch)">
<div>{{i.id}}</div>
<div>{{i.category}}</div>
<div>{{i.name}}</div>
<div>{{i.color}}</div>
</div>

过滤代码(js/coffee)

    .filter "scFilter", () ->
(collection, search) ->
if search
regexp = createAccentRegexp(search)
doesMatch = (txt) ->
(''+txt).match(regexp)
collection.filter (el) ->
if typeof el == 'object'
return true for att, value of el when (typeof value == 'string') && doesMatch(value)
doesMatch(el)
false
else
collection

所以我在这里想要的是仅过滤显示的元素(id、类别、名称和颜色),但由于某种原因,当我在输入上键入 25 时,对象仍然显示,因为他的 $$haskKey。

最佳答案

感谢您添加过滤器代码。解决方案应该很简单,只需在搜索匹配项时显式忽略 $$hashKey 即可:

.filter "scFilter", () ->
(collection, search) ->
return collection unless search
regexp = createAccentRegexp(search)
doesMatch = (txt) -> (''+txt).match(regexp)
collection.filter (el) ->
if typeof el == 'object'
return true for att, value of el when typeof(value) is 'string' and doesMatch(value) and att isnt '$$hashKey'
else
doesMatch(el)

我添加了一些小的重构:

  • 我将顶级 if 语句更改为保护子句,这减少了代码的缩进级别
  • 将简短的 doesMatch 函数更改为单行函数
  • 在条件语句中使用 andisisnt

主要更改是跳过 key 等于 $$hashkey 的任何属性

这尚未经过测试,所以我希望它对您有用。

关于javascript - 如何仅过滤显示的元素? (不要过滤$$hashKey),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40917119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com