如何根据项目是否是对象的关键字从另一个列表中创build项目列表? (Lodash首选)

如何用更有说服力的方式来说,最好使用Lodash:

anObject = { 'a': 'apple', 'b': 'banana' }; largeArray = ['a', 'c', 'd']; emptyArray = []; for (var s = 0; s < largeArray.length; s++) { if (anObject[largeArray[s]]) { emptyArray.push(anObject[largeArray[s]]); } } console.log(emptyArray) 

应该给我:

 emptyArray = ['a'] 

您可以从largeArray获取交集() ,并从anObjectvariables中获取keys()来完成此操作。

 _.intersection(largeArray, _.keys(anObject)); 
 var anObject = {'a': 'apple', 'b': 'banana'}; var largeArray = ['a','c','d']; var emptyArray = _.intersection(largeArray, _.keys(anObject)); console.log(emptyArray); 
 <script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script> 

你不需要这样做。 使用内置的Array.prototype.filter()方法。 这将返回一个新的数组而不修改原来的。

 let obj = {'a': 'apple', 'b': 'banana'}; let arr = ['a', 'c', 'd']; let result = arr.filter(item => obj.hasOwnProperty(item)); console.log(result); // ['a'] 

或者,在ES5中:

 var obj = {'a': 'apple', 'b': 'banana'}; var arr = ['a', 'c', 'd']; var result = arr.filter(function(item) { return obj.hasOwnProperty(item); }); console.log(result); // ['a'] 

从lodash中使用filter() , has()和partial() :

 _.filter(largeArray, _.partial(_.has, anObject));