2017-02-17 49 views
3

我有一個對象陣列是這樣的:濾波器陣列如果元素存在於另一個數組基於值

var objectArray = [{id_5:"100"}, 
        {id_1:"300"}, 
        {id_2:"500"}, 
        {id_4:"700"}, 
        {id_3:"200"}]; 

和正常陣列是這樣的:

var normalArray = ["id_2","id_5","id_4"]; 

欲減去每一個元素從objectArray中,如果在normalArray中有匹配的ID。然後,我想通過對象的值(最低值爲第一)對新創建的數組進行排序。

因此,對於上面的例子中,結果將是:

var newObjectArray = [{id_3:"200"}, 
         {id_1:"300"}]; 

是否有可能做到這一點沒有jQuery的?

我看過類似這樣的問題:Removing object from one array if present in another array based on value但我一直沒能找到有效的答案。是否有可能做這樣的比較和刪除,同時仍然保持鍵:值對完好無損?提前感謝您的幫助!

+3

一切皆有可能在JS沒有jQuery的,因爲jQuery是寫在JS。 – Utkanos

+0

@艾米莉,它爲我解決了你的問題嗎? –

回答

3

您應該使用filter方法,該方法接受參數a callback函數。

此外,您必須使用Object.keys()方法才能獲得objectArray中每個object的密鑰。

要檢查objectArrayelement是否未出現在objectArray中,應使用indexOf()方法。

要實現sorted數組,您必須使用sort()方法。

var objectArray = [{id_5:"100"}, 
 
        {id_1:"300"}, 
 
        {id_2:"500"}, 
 
        {id_4:"700"}, 
 
        {id_3:"200"}]; 
 

 
var normalArray = ["id_2","id_5","id_4"]; 
 
var newArray=objectArray.filter(function(item){ 
 
    return normalArray.indexOf(Object.keys(item)[0]) == -1; 
 
}).sort(function(a,b){ 
 
    return a[Object.keys(a)[0]] - b[Object.keys(b)[0]]; 
 
}); 
 
console.log(newArray);

1

你可先用filter()刪除對象與來自其它陣鍵,然後排序進行排序的對象的值的結果的數組。

var objectArray = [{id_5:"100"},{id_1:"300"},{id_2:"500"},{id_4:"700"},{id_3:"200"}]; 
 
var normalArray = ["id_2","id_5","id_4"]; 
 

 
var newArray = objectArray 
 
    .filter(e => !normalArray.includes(Object.keys(e)[0])) 
 
    .sort((a, b) => a[Object.keys(a)[0]] - b[Object.keys(b)[0]]) 
 
    
 
console.log(newArray)