gpt4 book ai didi

javascript - 文本搜索——过滤两个不同对象/数组中的两个词

转载 作者:行者123 更新时间:2023-11-30 05:34:46 28 4
gpt4 key购买 nike

我正在为我的网络应用程序使用 angularJS,但我遇到了以下问题。当我使用 angularjs' filter搜索,比方说“John Smith”,我的对象,构建如下({firstname:'John',lastname:'Smith'}),不会被识别,因为名字和姓氏不同一 key 的一部分。

知道如何使空格成为空格或搜索其他键(或数组)吗?

最佳答案

编辑:

根据您的要求,我想到了这个:

$scope.compFunc = function(actual, expected) {

var expectedSplit = expected.split(' ');
var fullActual;
//Search people for the person the name belongs to
$scope.names.forEach(function(person){
angular.forEach(person, function(name){
if (name === actual) {
fullActual = person;
}
})

})

//create an array from the names object for comparison
var fullActualArray = [];
angular.forEach(fullActual, function(name, key){
if (key != '$$hashKey')
fullActualArray.push(name = name.toLowerCase());
})

fullActualArray.sort();
expectedSplit.sort();

return actual.toLowerCase().indexOf(expected.toLowerCase()) > -1||
fullActualArray.join(',') === expectedSplit.join(',');


};

这应该按照您的预期工作。

FIDDLE

注意:为了清楚起见,我使用了forEach,但是如果您有大量数据,您可能希望将其更改为for 循环,这是90%更快,并且可以在找到匹配项时中断。


以前的解决方案:

非常简单,检查在搜索中输入的值 (expected) 是否存在于 firstname 或 lastname (actual) 中,或者相反。所以输入“Robert Downy”应该可以,但“Robert blargh”或“abcDownyefg”也可以。检查整个事情(名字 + 姓氏)是你必须在比较功能之外做的事情,据我所知,不支持开箱即用的 Angular 。

我还使用以下内容创建了一个新数组,以便使用全名进行比较:

$scope.fullnames = $scope.names.map(function(name){
return {
firstname: name.firstname,
lastname: name.lastname,
fullname :name.firstname + " " + name.lastname
}
})

虽然扩展原始数组可以这样做:

$scope.names.forEach(function(name){
angular.extend(name,{fullname:name.firstname + " " + name.lastname});
})

这简单有效,也是我会做的。

关于javascript - 文本搜索——过滤两个不同对象/数组中的两个词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24593526/

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