【问题标题】:How to sort twodimensional array by how closely it matches a word?如何根据与单词的匹配程度对二维数组进行排序?
【发布时间】:2016-01-15 02:03:41
【问题描述】:

在这里提琴:https://jsfiddle.net/t226j4ox/6/

我有一个二维数组,其中包含未排序的名称列表。

我试图弄清楚如何根据名称与用户关键字的匹配程度来对数组中的名称进行排序。在 jsfiddle 中,出于测试目的,我将用户的关键字设置为“Be”。理想情况下,当您点击“排序名称”按钮时,将对数组进行排序,以便首先出现以“Be”开头的名称。

这应该如何实现?

HTML

<div id="button1">
Display All Names
</div>

<br>

<div id="button2">
Sort Names
</div>

CSS

#button1{
  background:cornflowerblue;
  height:20px;
  width:200px;
  cursor:pointer;
  text-align:center;
}

#button2{
  background:mediumpurple;
  height:20px;
  width:200px;
  cursor:pointer;
  text-align:center;
}

JS

var nameList = "";

var names = [["name","Bradley"],["id","Brooke"],["name","Bobby"],
             ["name","Bethany"],["id","Benjamin"],["name","Bella"],
             ["name","Blake"],["id","Beatrice"],["name","Baby"],
             ["name","Byron"],["id","Buster"],["name","Bailey"],
             ["name","Betty"],["id","Billy"],["name","Brady"]];



var userKeyword = "Be";


$(document).on('click', '#button1', function(event) { 
        for (i=0; i<5; i++){
            nameList += names[i][1] + " ";        
        }

        alert(nameList);

}); 

$(document).on('click', '#button2', function(event) { 

}); 

【问题讨论】:

  • 在我告诉你答案之前,你认为你需要什么来解决这个问题?
  • 检查数组项的首字母是否与词条的首字母匹配,以此类推。但我认为必须有一种正式的方式来做到这一点,而不是手动为其创建自己的代码。
  • id/name 是什么......你没有使用对象似乎也很奇怪。
  • 你有确定匹配分数的算法吗?
  • 不,还没有。我只是不想开始编写可能已经具有预制功能的东西(我看到他们具有按字母和数字排序的预制功能),但我想这必须手动完成。因此,为了清楚起见,您建议比较数组的第一个字母、第二个字母等与用户的术语,然后根据匹配的字母对每个数组成员进行评分,然后根据每个成员的分数重新排列数组?谢谢你。哦,id/name 的东西很奇怪,但需要。至于对象,我对它们没有太多经验。这样会更容易吗?

标签: javascript jquery arrays sorting


【解决方案1】:

使用sort函数

var nameList = '';

var names = [
	['name','Bradley'],
	['id','Brooke'],
	['name','Bobby'],
	['name','Bethany'],
	['id','Benjamin'],
	['name','Bella'],
	['name','Blake'],
	['id','Beatrice'],
	['name','Baby'],
	['name','Byron'],
	['id','Buster'],
	['name','Bailey'],
	['name','Betty'],
	['id','Billy'],
	['name','Brady']
];

var userKeyword = 'Be';

names.sort(function(a, b){
	return b[1].indexOf(userKeyword) - a[1].indexOf(userKeyword);
});


document.write(JSON.stringify(names));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 2013-08-16
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    相关资源
    最近更新 更多