2014-02-17 87 views
-2

我想讓array1轉換爲array2。 關鍵字是test,test2,885,長度。我希望關鍵字的下一個值(#?)到下一個#是最高的。刪除具有較低特定值的數組項目

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"]; 
+3

你分裂條件不明確。你可以添加更多的細節。 – Praveen

回答

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); 

JsFiddle example

+0

太棒了! – Eddy

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"]