【问题标题】:how to filter object in javascript by specific key [closed]如何通过特定键过滤javascript中的对象[关闭]
【发布时间】:2018-10-17 17:06:00
【问题描述】:

我在数组[0]中有以下对象:

   [
       {
        "startDay": "05-06",
        "endDay": "05-06",
        "startTime": "xxxx", 
        "eventType": "craft" 
    },
    {
        "startDay": "05-05",
        "endDay": "05-06",
        "startTime": "1400", 
        "eventType": "art" 
    },
    {
        "startDay": "05-08","endDay": "05-08",
        "startTime": "1100", 
        "eventType": "music" 
    },
    {
        "startDay": "05-08","endDay": "05-08",
        "startTime": "1400", 
        "eventType": "fishing" 
    },
    {
        "startDay": "05-07","endDay": "05-08",
        "startTime": "1400", 
        "eventType": "football" 
    }
]

如何按 item.startDay 过滤?例如如果过滤器是“05-06”,过滤器将是:

[{
        "startDay": "05-06",
        "endDay": "05-06",
        "startTime": "xxxx", 
        "eventType": "craft" 
    }]

如果过滤器是“05-08”,则过滤器将是:

[{
        "startDay": "05-08","endDay": "05-08",
        "startTime": "1100", 
        "eventType": "music" 
    },
    {
        "startDay": "05-08","endDay": "05-08",
        "startTime": "1400", 
        "eventType": "fishing" 
    }]

【问题讨论】:

  • filter() 函数与将startDay 属性与您要查找的属性进行比较的函数一起使用。
  • 我投票决定将此问题作为题外话结束,因为您至少需要付出一些努力。

标签: javascript json object filter


【解决方案1】:

您可以使用filter 方法并将回调提供的函数作为参数传递。

filter() 方法创建一个包含所有通过的元素的新数组 由提供的函数实现的测试。

let data = [ { "startDay": "05-06", "endDay": "05-06", "startTime": "xxxx", "eventType": "craft" }, { "startDay": "05-05", "endDay": "05-06", "startTime": "1400", "eventType": "art" }, { "startDay": "05-08","endDay": "05-08", "startTime": "1100", "eventType": "music" }, { "startDay": "05-08","endDay": "05-08", "startTime": "1400", "eventType": "fishing" }, { "startDay": "05-07","endDay": "05-08", "startTime": "1400", "eventType": "football" } ]

let startDay = "05-08";
data = data.filter(function(item){
  return item.startDay == startDay;
});
console.log(data);

另一种方法是使用arrow 函数。

let data = [ { "startDay": "05-06", "endDay": "05-06", "startTime": "xxxx", "eventType": "craft" }, { "startDay": "05-05", "endDay": "05-06", "startTime": "1400", "eventType": "art" }, { "startDay": "05-08","endDay": "05-08", "startTime": "1100", "eventType": "music" }, { "startDay": "05-08","endDay": "05-08", "startTime": "1400", "eventType": "fishing" }, { "startDay": "05-07","endDay": "05-08", "startTime": "1400", "eventType": "football" } ]

let startDayParam = "05-08";
data = data.filter(({startDay}) => startDay == startDayParam);
console.log(data);

【讨论】:

    【解决方案2】:

    你可以像这样使用.filter()

    let data =  [{"startDay": "05-06","endDay": "05-06","startTime": "xxxx","eventType": "craft"},{"startDay": "05-05","endDay": "05-06","startTime": "1400","eventType": "art"},{"startDay": "05-08","endDay": "05-08","startTime": "1100", "eventType": "music"},{"startDay": "05-08","endDay": "05-08","startTime": "1400","eventType": "fishing"},{"startDay": "05-07","endDay": "05-08","startTime": "1400","eventType": "football"}],
        match = '05-08';
    
    let result = data.filter(({ startDay }) => startDay == match);
    
    console.log(result);

    【讨论】:

      【解决方案3】:

      您可以使用filter 方法:

      const array = [{
          "startDay": "05-06",
          "endDay": "05-06",
          "startTime": "xxxx",
          "eventType": "craft"
        },
        {
          "startDay": "05-05",
          "endDay": "05-06",
          "startTime": "1400",
          "eventType": "art"
        },
        {
          "startDay": "05-08",
          "endDay": "05-08",
          "startTime": "1100",
          "eventType": "music"
        },
        {
          "startDay": "05-08",
          "endDay": "05-08",
          "startTime": "1400",
          "eventType": "fishing"
        },
        {
          "startDay": "05-07",
          "endDay": "05-08",
          "startTime": "1400",
          "eventType": "football"
        }
      ];
      const elementsWith0508 = array.filter(element => element.startDay === '05-08');
      console.log(elementsWith0508);

      【讨论】:

        【解决方案4】:

        你可以这样做:

        const filteredArray = array[0].filter((value) => {
          return value.startDay == "05-06"
        })
        

        过滤器函数中的 return 返回每个匹配条件的对象并用它构建一个新数组。

        希望对你有帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-03
          • 2017-11-10
          • 1970-01-01
          • 2022-07-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多