爲「刪除從一個數組項」的基礎上完成的狀態下的物品的最簡單的方法是使用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"]
你分裂條件不明確。你可以添加更多的細節。 – Praveen