如何在Javascript或Undercore中以数组元素列表为键筛选对象

How to filter an Object in Javascript or Underscore with list of array elements as the key

本文关键字:列表 数组元素 对象 筛选 Javascript Undercore      更新时间:2023-09-26

我分别有以下对象和数组。

cities = ['Berlin', 'Melbourne', 'Dallas']
population = { 'Amsterdam': 100, 'Berlin': 150, 'Cairo': 200, 'Jakarta': 300, 'Melbourne':350, 'Dallas': 400, 'Buenos Aires': 100}

我想根据数组中提到的城市来过滤人口。输出如下所示。

订单无关紧要

filtered_population = {'Berlin': 150, 'Melbourne':350, 'Dallas': 400}

在编写最少代码的情况下,最好的方法是什么?

像这样尝试

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

JSFIDDLE

您可以使用reduce()来避免"side-var":

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 })
)