【问题标题】:How to find a item in a Array matches user input ? jquery如何在数组中找到与用户输入匹配的项目? jQuery
【发布时间】:2014-11-01 12:37:51
【问题描述】:

我有一个包含TextValue 字段的数组,该数组具有动态长度的数组。

我通过控制器的 ajax 调用加载我的数组内容

self.arr=ko.observableArray();

success : function(data)
{
    self.arr(data); //data having my items 
}

var listArray = self.arr();

我需要使用字符串类型的输入查询我的 listArray,比如 kate 。如果 kate 出现在数组中任何项目的文本下,我只需要 true 否则 false

这可以通过运行 foreachloop 并让循环运行直到找到匹配然后退出来完成。我不喜欢循环,尤其是在大多数情况下我不想展示我的代码。是否有我们可以在数组上应用的直接函数来完成这件事。类似于 Linq 到 c# 中的实体。

感谢任何帮助

【问题讨论】:

  • 这是一个对象数组?
  • 您可以在数组上使用some
  • @kinakuta 是的,user32342534 让我试试

标签: jquery arrays knockout.js


【解决方案1】:

您可以使用 jQuery 的 grep() 基于谓词函数进行查找:

jsFiddle

var listArray = [{id: 1, name:'Joe'}, {id: 2, name:'Kate'}, {id: 3, name:'Kate'}, {id: 4, name:'Mary'}];

var arrayOfKates = $.grep(listArray, function(obj) {
   return obj.name === 'Kate';
});

console.debug(arrayOfKates); 
// [{id: 2, name:'Kate'}, {id: 3, name:'Kate'}]

您可以使用computed 函数绑定此数组。像这样:

self.katesArr = ko.computed(function() {
   $.grep(self.arr(), function(obj) {
       return obj.name === 'Kate';
    });
});

【讨论】:

  • 正如上面 user32342534 提到的 some 这也是一个很酷的,我使它符合我的要求,并会尝试 .grep 并让你知道
  • 当我使用 user32342534 some 时,它看起来最适合我的代码,因为他没有将其发布为答案,我将标记 urs 看起来引人注目且工作正常。谢谢
  • 如果您可以将代码发布在您使用some 的位置,我可以将其添加到我的答案中以供将来参考。
【解决方案2】:

Knockout 为这类事情提供了许多实用功能......

arrayFirst 可能对你有用...

    return ko.utils.arrayFirst(this.myObservableArray(), function(item) {
            return ko.utils.stringStartsWith(item.name().toLowerCase(), 'kate');
    }

这是一篇很好的文章,展示了 Knockout 中可用的这个(和其他)实用功能。

http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html

【讨论】:

  • 是的,我喜欢使用它们,但我不能在我的场景中使用它们,其中代码在 2 个 js 文件中分离等等等等。很好的信息,我喜欢使用过滤器很棒的一个:)。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 2018-08-01
  • 1970-01-01
  • 2021-01-01
相关资源
最近更新 更多