如果您想了解用“Levenshtein距离”对数组进行排序,在Javascript中具有最佳性能的相关知识,那么本文是一篇不可错过的文章,我们将对数组的距离进行全面详尽的解释,并且为您提供关于Java
如果您想了解用“ Levenshtein距离”对数组进行排序,在Javascript中具有最佳性能的相关知识,那么本文是一篇不可错过的文章,我们将对数组的距离进行全面详尽的解释,并且为您提供关于Javascript - 基于另一个数组对数组进行排序、javascript – 按其相对位置对数组进行排序、javascript – 按字母顺序对字符串数组进行排序,然后按特殊字符对数字进行排序、javascript – 根据JSON Response中的时间戳值对数组进行排序的有价值的信息。
本文目录一览:- 用“ Levenshtein距离”对数组进行排序,在Javascript中具有最佳性能(数组的距离)
- Javascript - 基于另一个数组对数组进行排序
- javascript – 按其相对位置对数组进行排序
- javascript – 按字母顺序对字符串数组进行排序,然后按特殊字符对数字进行排序
- javascript – 根据JSON Response中的时间戳值对数组进行排序
用“ Levenshtein距离”对数组进行排序,在Javascript中具有最佳性能(数组的距离)
所以我有一个随机的javascript名称数组…
[@ larry,@ nicholas,@ notch]等
它们都以@符号开头。我想按Levenshtein距离对它们进行排序,以使列表顶部的那些最接近搜索词。目前,我有一些使用jQuery的javascript,.grep()
它使用javascript
.match()
方法在按键时输入的搜索词周围:
(自首次发布以来编辑的代码)
limitArr = $.grep(imTheCallback,function(n){
return n.match(searchy.toLowerCase())
});
modArr = limitArr.sort(levenshtein(searchy.toLowerCase(),50))
if (modArr[0].substr(0,1) == '@') {
if (atRes.childred('div').length < 6) {
modArr.forEach(function(i){
atRes.append('<div>' + i + '</div>');
});
}
} else if (modArr[0].substr(0,1) == '#') {
if (tagRes.children('div').length < 6) {
modArr.forEach(function(i){
tagRes.append('<div>' + i + '</div>');
});
}
}
$('.oneResult:first-child').addClass('active');
$('.oneResult').click(function(){
window.location.href = 'http://hashtag.ly/' + $(this).html();
});
它还具有一些if语句,用于检测数组是否包含井号(#)或提及(@)。不用管
的imTheCallback
是名称的阵列,或者主题标签或提及,然后modArr
是阵列排序。然后.atResults
和.tagResults
元素是它每次在数组中附加到的元素,这将基于输入的搜索词形成一个名称列表。
我 也 有Levenshtein距离算法:
var levenshtein = function(min,split) {
// Levenshtein Algorithm Revisited - WebReflection
try {
split = !("0")[0]
} catch(i) {
split = true
};
return function(a,b) {
if (a == b)
return 0;
if (!a.length || !b.length)
return b.length || a.length;
if (split) {
a = a.split("");
b = b.split("")
};
var len1 = a.length + 1,len2 = b.length + 1,I = 0,i = 0,d = [[0]],c,j,J;
while (++i < len2)
d[0][i] = i;
i = 0;
while (++i < len1) {
J = j = 0;
c = a[I];
d[i] = [i];
while(++j < len2) {
d[i][j] = min(d[I][j] + 1,d[i][J] + 1,d[I][J] + (c != b[J]));
++J;
};
++I;
};
return d[len1 - 1][len2 - 1];
}
}(Math.min,false);
如何在当前代码中使用算法(或类似算法)对它进行排序,而不会降低性能呢?
更新:
所以我现在正在使用James Westgate的Lev Dist函数。快速运行WAYYYY。因此性能得以解决,现在的问题是将其与源一起使用…
modArr = limitArr.sort(function(a,b){
levDist(a,searchy)
levDist(b,searchy)
});
我现在的问题是对使用该.sort()
方法的一般理解。感谢您的帮助,谢谢。
谢谢!
Javascript - 基于另一个数组对数组进行排序
是否可以对如下所示的数组进行排序和重新排列:
itemsArray = [
['Anne','a'],['Bob','b'],['Henry',['Andrew','d'],['Jason','c'],['Thomas','b']
]
匹配这个数组的排列:
sortingArr = [ 'b','c','b','a','d' ]
不幸的是,我没有任何 ID 可以跟踪。我需要优先考虑 items-array 以匹配 sortArr 尽可能接近。
更新:
这是我正在寻找的输出:
itemsArray = [
['Bob','b']
['Anne',]
知道如何做到这一点吗?
javascript – 按其相对位置对数组进行排序
[{ id: 'a',beforeId: null },{ id: 'b',beforeId: 'c' },{ id: 'c',beforeId: 'a' },{ id: 'd',beforeId: 'b' }]
输出顺序:d-b-c-a;每个元素基于其beforeId属性相对于每个其他元素进行排序.
我可以创建一个临时数组并对上面的数组进行排序.是否可以使用array.sort进行排序?
解决方法
下一个对象是以实际val为键的对象.
复杂性:O(2n).
function chain(array) { var o = {},pointer = null,result = []; array.forEach(a => o[a.beforeId] = a); while (o[pointer]) { result.unshift(o[pointer]); pointer = o[pointer].val; } return result; } var data = [{ val: 'a',beforeId: null },{ val: 'b',beforeId: 'c' },{ val: 'c',beforeId: 'a' },{ val: 'd',beforeId: 'b' }]; console.log(chain(data));
.as-console-wrapper { max-height: 100% !important; top: 0; }
javascript – 按字母顺序对字符串数组进行排序,然后按特殊字符对数字进行排序
nextSearchTerms = ["T","D","I","C","Y","O","4","K","N","800","S","1","V","(","10","'","`","B","M","[","-"," ","J","U","H","G","R","E","P"]; console.log(nextSearchTerms); Array.prototype.naturalSort = function(){ var a,b,a1,b1,rx=/(\d+)|(\D+)/g,rd=/\d+/; return this.sort(function(as,bs){ a= String(as).toLowerCase().match(rx); b= String(bs).toLowerCase().match(rx); while(a.length && b.length){ a1= a.shift(); b1= b.shift(); if (rd.test(a1) || rd.test(b1)){ if(!rd.test(a1)) return -1; if(!rd.test(b1)) return 1; if(a1 != b1) return a1-b1; } else if (a1 != b1) { var aIsLetter = a1[0].charat(0).match(/[a-z]/i),bIsLetter = b1[0].charat(0).match(/[a-z]/i); if (aIsLetter && !bIsLetter) return -1; if (!aIsLetter && bIsLetter) return 1; return (a1[0] == b1[0] ? 0 : (a1[0] < b1[0] ? -1 : 1)); } } return a.length - b.length; }); } console.log(nextSearchTerms.naturalSort());
我一直试图修改的函数返回.
[“B”,“C”,“D”,“E”,“G”,“H”,“I”,“J”,“K”,“M”,“N”,“O”,“ P“,”R“,”S“,”T“,”U“,”V“,”Y“,”“,”’“,”(“,” – “,”[“,”`“,“1”,“4”,“10”,“800”]
我想最终的数组输出.
[“B”,”1“,”4“,”10“,”800“,“ – ”,“[”,“`”,“”]
关于我缺少什么的任何建议?
解决方法
Array.prototype.naturalSort = function() { var stringRE = /^[A-Za-z]+$/ var numberRE = /^[\d]+$/ return this.sort(function(a,b) { var aIsstring = stringRE.test(a); var bIsstring = stringRE.test(b) var aIsNumeric = numberRE.test(a); var bIsNumeric = numberRE.test(b); if (aIsstring && bIsstring) { return a.localeCompare(b); } else if (aIsNumeric && bIsNumeric) { return parseInt(a,10) - parseInt(b,10); } else if (aIsstring && bIsNumeric) { return -1; } else if (aIsNumeric && bIsstring) { return 1; } else if (aIsstring || aIsNumeric) { return -1; } else if (bIsstring || bIsNumeric) { return 1; } else { return a.localeCompare(b); } }) }; var chars = ["T","P"]; console.log(chars.naturalSort()); // ["B","P","T","`"]
javascript – 根据JSON Response中的时间戳值对数组进行排序
每个图像都有自己的时间戳值,我需要在增加的时间戳值中显示它.这意味着应该首先在我的应用程序中加载最后更新的图像.
时间戳在JSON响应中采用以下格式:
Brand1{ "FileName": "520120427043622011.jpg","UpdateTimeStamp": "Jun 10,2013 8:31:23 AM" } Brand2{ "FileName": "Kung_Fu_Fingers.jpg","UpdateTimeStamp": "Jun 5,2013 6:51:12 AM" } Brand3{ "FileName": "google_logo1.jpg",2013 8:31:23 AM" }
任何人都可以指导我使用Javascript或jQuery函数根据时间戳值对上述三个品牌图像项进行排序.
我在分割dat值后使用了sort函数,但它只按字母顺序对月份进行排序.
请帮我找到解决方案.
提前致谢.
解决方法
function insertionSort(files,attrToSortBy){ for(var k=1; k < files.length; k++){ for(var i=k; i > 0 && new Date(files[i][attrToSortBy]) < new Date(files[i-1][attrToSortBy]); i--){ var tmpFile = files[i]; files[i] = files[i-1]; files[i-1] = tmpFile; } } } var files = [{ "FileName": "520120427043622011.jpg",2013 8:31:23 AM" },{ "FileName": "Kung_Fu_Fingers.jpg",2013 6:51:12 AM" },{ "FileName": "google_logo1.jpg","UpdateTimeStamp": "Jun 12,2013 8:31:23 AM" }]; insertionSort(files,"UpdateTimeStamp"); console.log('files: ',files);
今天关于用“ Levenshtein距离”对数组进行排序,在Javascript中具有最佳性能和数组的距离的分享就到这里,希望大家有所收获,若想了解更多关于Javascript - 基于另一个数组对数组进行排序、javascript – 按其相对位置对数组进行排序、javascript – 按字母顺序对字符串数组进行排序,然后按特殊字符对数字进行排序、javascript – 根据JSON Response中的时间戳值对数组进行排序等相关知识,可以在本站进行查询。
本文标签: