【发布时间】:2020-04-27 17:53:08
【问题描述】:
我需要使用我们搜索的关键字对搜索结果中的 javascript 数组进行排序。例如:
var profile = [
{name: 'Arjun', age: 10},
{name: 'Manu', age: 12},
{name: 'Lipin', age: 15},
{name: 'Anu', age: 11},
{name: 'Anupama', age: 21},
{name: 'Jijo', age: 34}
];
如果要搜索的关键字是“Anu”。 我想要的结果如下。
[
{name: 'Anu', age: 11},
{name: 'Anupama', age: 21},
{name: 'Manu', age: 12}
]
也就是说,我需要对数组进行过滤,并用关键字对结果进行排序。
以下是我尝试过的代码。搜索工作正常。如何使用搜索关键字进行过滤?
var profile = [
{name: 'Arjun', age: 10},
{name: 'Manu', age: 12},
{name: 'Lipin', age: 15},
{name: 'Anu', age: 11},
{name: 'Anupama', age: 21},
{name: 'Jijo', age: 34},
{name: 'Abhiram', age: 22},
{name: 'Ram', age: 20},
{name: 'Ram Gopal', age: 21},
{name: 'Ramachandran', age: 20},
{name: 'Sreeram', age: 19},
];
beneficiaryname = "Anu";
result = profile.map(function(item, index){
var existingname = 1;
var row_ben_name = item.name;
existingname = row_ben_name.toLowerCase().search(beneficiaryname.toLowerCase()) !== -1;
if (existingname){
return item;
}
});
result = result.filter(function( element ) {
return element !== undefined;
});
console.log(result);
注意:我想使用搜索关键字对数组进行排序。不是默认的 A-Z 排序。
更新:
为了更清楚,我用更多数据和预期结果更新了我的问题。
如果我使用另一个关键字“Ram”进行搜索。我需要以下结果。
[
{name: 'Ram', age: 20},
{name: "Ram Gopal", age: 21},
{name: "Ramachandran", age: 20},
{name: "Abhiram", age: 22},
{name: "Sreeram", age: 19}
]
看到上面预期的结果是用搜索的关键字排序的。 也就是说,在排序的结果中,首先我们需要对确切的搜索结果进行排序,然后将关键字作为字符串中的第一个,然后是内部的任何位置,然后是字符串的末尾。我希望每个人都能解决问题。
【问题讨论】:
-
这样做
profile.filter(x=>x.name.toLowerCase().contains("anu")).sort((a,b) => (a.name > b.name) ? 1 : ((b.name > a.name) ? -1 : 0)); -
这几乎是一样的,只是它不过滤掉结果。 stackoverflow.com/questions/26796276/…
标签: javascript arrays json sorting javascript-objects