如何以数组元素列表为键过滤Javascript或下划线中的对象

如何以数组元素列表为键过滤Javascript或下划线中的对象,javascript,algorithm,underscore.js,Javascript,Algorithm,Underscore.js,我分别有以下对象和数组 cities = ['Berlin', 'Melbourne', 'Dallas'] population = { 'Amsterdam': 100, 'Berlin': 150, 'Cairo': 200, 'Jakarta': 300, 'Melbourne':350, 'Dallas': 400, 'Buenos Aires': 100} 我想根据数组中提到的城市过滤人口。输出如下所示 秩序无关紧要 编写最少代码的最佳方法是什么?尝试这样做 var filter

我分别有以下对象和数组

cities = ['Berlin', 'Melbourne', 'Dallas']

population = { 'Amsterdam': 100, 'Berlin': 150, 'Cairo': 200, 'Jakarta': 300, 'Melbourne':350, 'Dallas': 400, 'Buenos Aires': 100}
我想根据数组中提到的城市过滤人口。输出如下所示

秩序无关紧要

编写最少代码的最佳方法是什么?

尝试这样做

var filterObj={};

cities.forEach(function(x){
  filterObj[x]=population [x];
});
console.log(filterObj);

像这样试试

var filterObj={};

cities.forEach(function(x){
  filterObj[x]=population [x];
});
console.log(filterObj);

您可以使用reduce()来避免“side var”:

您可以使用reduce()来避免“side var”:

刚找到这个uu.pick(人口,城市),;它就像一个符咒!谢谢大家!:-)刚找到这个uu.pick(人口,城市),;它就像一个符咒!谢谢大家!:-)
var cities = ['Berlin', 'Melbourne', 'Dallas'],    
population = { 'Amsterdam': 100, 'Berlin': 150, 'Cairo': 200, 'Jakarta': 300, 'Melbourne':350, 'Dallas': 400, 'Buenos Aires': 100};

_.reduce(cities, function(a,b){ a[b]=population[b]; return a; },{});
// ==  {Berlin: 150, Melbourne: 350, Dallas: 400}
var filteredPopulation = _.object(
  _(population)
   .pairs()
   .filter(function(v) { return cities.indexOf(v[0]) !== -1 })
)