2017-09-22 35 views
0

比方說,我有兩個數組:的JavaScript - 過濾掉兩個數組,並採取了愚弄

var sellersDatabase = [ 
    { name: 'Mark', start_date: '2017-06-27' }, 
    { name: 'Jane', start_date: '2017-06-27' } 
]; 

var sellersAPICall = [ 
    { name: 'Mark', start_date: '2017-06-27' }, 
    { name: 'Joe', start_date: '2017-06-22' }, 
    { name: 'Steven', start_date: '2017-04-11' }, 
    { name: 'Jane', start_date: '2017-06-27' } 
]; 

會如何,無論是使用ES6或Lodash,讓那些不包含在第一陣列中的區別?是的,我試過lodash的difference()

所以,我期望的輸出將是:

var toInsertIntoDB = [ 
    { name: 'Joe', start_date: '2017-06-22' }, 
    { name: 'Steven', start_date: '2017-04-11' } 
]; 

這樣做:

javascript const toInsertToDB = _.difference(sellersDatabase, sellersAPICall); console.log(toInsertToDB);

輸出:

[{ "name": "Mark", "start_date": "2017-06-27" }, { "name": "Jane", "start_date": "2017-06-27" }]

(當我想要相反)

回答

5

由於您正在比較對象數組,而不是基元,請使用_.differenceBy(),以及應通過哪種屬性比較對象。另外,sellersAPICall數組應該是第一個(參考數組)。

var sellersDatabase = [ 
 
    { name: 'Mark', start_date: '2017-06-27' }, 
 
    { name: 'Jane', start_date: '2017-06-27' } 
 
]; 
 

 
var sellersAPICall = [ 
 
    { name: 'Mark', start_date: '2017-06-27' }, 
 
    { name: 'Joe', start_date: '2017-06-22' }, 
 
    { name: 'Steven', start_date: '2017-04-11' }, 
 
    { name: 'Jane', start_date: '2017-06-27' } 
 
]; 
 

 
var result = _.differenceBy(sellersAPICall, sellersDatabase, 'name'); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

如果你想比較2個屬性,你可以使用串接兩個值的回調函數:

var sellersDatabase = [ 
 
    { name: 'Mark', start_date: '2017-06-27' }, 
 
    { name: 'Jane', start_date: '2017-06-27' } 
 
]; 
 

 
var sellersAPICall = [ 
 
    { name: 'Mark', start_date: '2017-06-27' }, 
 
    { name: 'Joe', start_date: '2017-06-22' }, 
 
    { name: 'Steven', start_date: '2017-04-11' }, 
 
    { name: 'Jane', start_date: '2017-06-27' } 
 
]; 
 

 
var result = _.differenceBy(sellersAPICall, sellersDatabase, function(o) { 
 
    return o.name + '-' + o.start_date; 
 
}); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

+0

哦,老兄!應該繼續閱讀。我可能會有可能有相同名稱的賣家。有沒有辦法檢查'name'和'start_date'?我可以使用_.differenceWith(sellersAPICall,sellersDatabase,_.isEqual);'似乎。 – nn2

+0

你沒有寫過你的問題,所以我不能繼續閱讀:)你仍然可以使用'_.differenceBy()' - 參見第二個例子。 –

+0

@Ori Drori:在你的第二個例子中返回'o.name +' - '+ o.date;'應該返回'o.name +' - '+ o.start_date;' – Harold