我想让array1转换为array2。 关键字是test,test2,885,length。我希望关键字的下一个值(#?)到下一个#是最高的。
var array1=["4#test#4#T#limited","6#test#6#885#restricted","7#test2#2#2#limited","8#test2#4#3#limited","11#885#1#TT#restricted","15#length#1#taw#restricted","17#885#11#T#limited"];
var arrar2=["6#test#6#885#restricted","8#test2#4#3#limited","17#885#11#T#limited","15#length#1#taw#restricted"];
答案 0 :(得分:0)
您可以使用underscorejs进行过滤。
http://underscorejs.org/#filter
然后,您可以使用javascript Array的 sort 方法根据需要对数组进行排序。您可以传递自定义排序功能进行排序。 http://www.w3schools.com/jsref/jsref_sort.asp
答案 1 :(得分:0)
这是你想要的吗?
var array1=["4#test#4#T#limited","6#test#6#885#restricted","7#test2#2#2#limited","8#test2#4#3#limited","11#885#1#TT#restricted","15#length#1#taw#restricted","17#885#11#T#limited"];
var keywords = ["test","test2","885","length"];
var array2 = [];
keywords.forEach(function (key) {
var matched = [];
var regex = new RegExp("\\b" + key + "#(\\d+)");
array1.forEach(function (value) {
if (regex.test(value)) {
matched.push([parseInt(RegExp.$1), value]);
}
});
if (matched.length > 0) {
matched.sort(function (a, b) {
return b[0] - a[0];
});
array2.push(matched[0][1]);
}
});
alert(array2);
答案 2 :(得分:0)
根据满足条件的项目“从数组中删除项目”的最简单方法是使用Array.prototype.filter
(条件反转)。
在您的情况下,由于您组织数据的方式(将其全部捆绑在一个字符串中使其难以使用),因此很难做到。以下是我将如何处理它,但您可以从一开始就更好地构建数据,以避免尴尬的转换:
var array1=["4#test#4#T#limited","6#test#6#885#restricted","7#test2#2#2#limited","8#test2#4#3#limited","11#885#1#TT#restricted","15#length#1#taw#restricted","17#885#11#T#limited"];
通过提取关键字和值(我还保留一些信息以返回到数组的原始形状),使数据更易于使用:
var saneData = array1.map(function(item, index){
var split = item.split('#');
return {
keyword : split[1],
value: +split[0],
original : item,
originalIndex : index
}
});
按关键字排序数据(因此所有具有相同关键字的项目彼此相邻)和值(因此最大值首先出现在具有相同关键字的子集中):
saneData.sort(function(a,b){
if (a.keyword !== b.keyword) {
return a.keyword.localeCompare(b.keyword);
} else {
return b.value - a.value;
}
});
过滤数组,只保留具有相同关键字的子集中的第一项:
var filteredData = saneData.filter(function(item, index) {
if (index === 0) return true; // first item is good
return item.keyword !== saneData[index-1].keyword;
});
返回数组的原始形式(保留顺序):
var array2 = filteredData.sort(function(a,b){ return a.originalIndex - b.originalIndex; }).map(function(item){ return item.original; });
// Result: ["6#test#6#885#restricted", "8#test2#4#3#limited", "15#length#1#taw#restricted", "17#885#11#T#limited"]