2017-07-26 62 views
1

我有两个数组,余额和承诺underscorejs如何比较两个数组?

balances = [ 
{name: 'vacation', value: ''21}, 
{name: 'account', value: '200'}, 
{name: 'order', value: '15'}, 
] 

commits = [ 
{balanceName: 'vacation', paramName: 'number of days'}, 
{balanceName: 'order', paramName: 'number of items'} 
] 

我想删除表格余额究竟是不是在犯,在这个例子中,我想删除余额账户价值的原因是没有在任何的balanceName的提交 如何通过下划线或任何其他库执行此操作

+0

您可以参考此链接https://stackoverflow.com/questions/10110510/underscore-js-determine-if-all-values-in-an-array-of-arrays-match –

+0

可能的重复[如何过滤数组时,对象的键值是在数组中](https://stackoverflow.com/questions/35817565/how-to-filter-array-when-object-key-value-is-in-array) –

回答

2

你可以做,使用undescore.js这样的:

var balances = [ 
 
{name: 'vacation', value: '21'}, 
 
{name: 'account', value: '200'}, 
 
{name: 'order', value: '15'} 
 
] 
 

 
var commits = [ 
 
{balanceName: 'vacation', paramName: 'number of days'}, 
 
{balanceName: 'order', paramName: 'number of items'} 
 
] 
 
balances2= 
 
_.filter(balances,(b)=>commits.map(c=>c.balanceName).indexOf(b.name)>-1); 
 

 
console.log("using shorter syntax"); 
 
console.log(balances) 
 

 
//OR 
 
balances= 
 
    _.filter(balances,function(b){return commits.map(function(c){return c.balanceName}).indexOf(b.name)>-1}); 
 
    
 
    console.log("ES5 syntax"); 
 
console.log(balances2)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

_.filter将返回符合条件的所有条目。例如_.find只会返回第一个条目。 我也使用_.map它使用转换函数(在我的案例c=>c.balanceName)将具有多个属性的数组转换为其他数组。

+0

它的工作原理,谢谢您 – scully

-1

不需要此库的库。

function contains(commits, name) 
{ 
    commits.some(function(x) { return x.balanceName === name}); 
} 

for(blance in balances) { 
    if (contains(commits, balance.name){ 
     // Remove balance 
    } 
}