【问题标题】:Pass JSON key in function在函数中传递 JSON 密钥
【发布时间】:2017-05-22 16:42:39
【问题描述】:

是否可以将对象的键指定为函数参数?例如,如果我想创建一个过滤函数,可以通过 marker.element.country 或 marker.element.population 过滤多个地图标记?

这样我可以写filter("England", country)filter(100000, population)

var markers = [...some array of JSON objects];
function filter(value, filterBy){
    markers.forEach(function (marker) {
        marker.setVisible(marker.element[filterBy] == value);
        //marker.setVisible(marker.element.filterBy == value); -didn't work either
    });
};

我不是在寻找解决办法。我知道我可以编写几个单独的函数,或者在这个函数中创建一些条件,根据 filterBy 的值表现不同。

这不好玩:

var markers = [...some array of JSON objects];
function filter(value, filterBy){
    if(filterBy == "country"){
        markers.forEach(function (marker) {
            marker.setVisible(marker.element.country == value);
        });
    }
    if(filterBy == "population"){
        markers.forEach(function (marker) {
            marker.setVisible(marker.element.population == value);
        });
    }
};

【问题讨论】:

  • 你的两个函数在功能上是等价的。第二个有用吗?

标签: javascript json parameters key


【解决方案1】:

其实可以使用标准数组filter函数来实现:

var markers = [ { country: 'England', population: 1000}, {country: 'Italy', population: 50}];
function customfilter(value, filterBy){
  return markers.filter(function(el) {
  	if(el.hasOwnProperty(filterBy) && el[filterBy] === value) {
      return el;
    }
  });
};
console.log(customfilter('Italy', 'country'));

【讨论】:

    猜你喜欢
    • 2020-05-24
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2015-07-19
    • 2013-03-21
    • 2018-12-27
    • 2015-06-25
    相关资源
    最近更新 更多