【问题标题】:JavaScript filtering Object on a property that is an arrayJavaScript 在一个数组的属性上过滤对象
【发布时间】:2020-05-14 04:56:25
【问题描述】:

我有以下有效负载(小样本)从 api 作为对象返回。

{
"0hmITkwFMbB2BDIUFlFm": {
    "price": 89,
    "categories": ["wireless", "broadband"],
    "companyname": "T-Mobile",
    "symbol": "TMUS"
},
"8g570i57at8yTjoZtSuk": {
    "companyname": "Microsoft",
    "symbol": "MSFT",
    "price": 181.25,
    "categories": ["technology", "software"]
},
"OMc8V4AVH5q5z0Sis8vp": {
    "companyname": "Amazon",
    "symbol": "AMZN",
    "price": 2419.49,
    "categories": ["E-commerce", "consumer products"]
},

我希望能够返回包含类别数组中给定值的每个对象。例如,返回类别数组中包含“技术”的所有对象。

如何在 javascript 中做到这一点?

【问题讨论】:

    标签: javascript object filter


    【解决方案1】:
    const obj = {
    "0hmITkwFMbB2BDIUFlFm": {
        "price": 89,
        "categories": ["wireless", "broadband"],
        "companyname": "T-Mobile",
        "symbol": "TMUS"
    },
    "8g570i57at8yTjoZtSuk": {
        "companyname": "Microsoft",
        "symbol": "MSFT",
        "price": 181.25,
        "categories": ["technology", "software"]
    },
    "OMc8V4AVH5q5z0Sis8vp": {
        "companyname": "Amazon",
        "symbol": "AMZN",
        "price": 2419.49,
        "categories": ["E-commerce", "consumer products"]
    }
    }
    
    const filteredObjects = Object.keys(obj).reduce((acc, rec) => {
      if (obj[rec].categories.includes('technology'))
        return [...acc, obj[rec]]
      return acc;
    }, [])
    
    console.log(JSON.stringify(filteredObjects))
    

    以下代码允许您获得满足给定条件的过滤对象数组。

    【讨论】:

      【解决方案2】:

      试试看

      let filteredObjects = [];
      Object.keys(sampleObjects).map((key) =>{
         if (sampleObjects.indexOf('technology') != -1) {
            filteredObjects.push(sampleObjects[key];
         }
      });
      

      【讨论】:

        【解决方案3】:
        let response = {
          "0hmITkwFMbB2BDIUFlFm": {
            "price": 89,
            "categories": ["wireless", "broadband"],
            "companyname": "T-Mobile",
            "symbol": "TMUS"
          },
          "8g570i57at8yTjoZtSuk": {
            "companyname": "Microsoft",
            "symbol": "MSFT",
            "price": 181.25,
            "categories": ["technology", "software"]
          },
          "OMc8V4AVH5q5z0Sis8vp": {
            "companyname": "Amazon",
            "symbol": "AMZN",
            "price": 2419.49,
            "categories": ["E-commerce", "consumer products"]
          }
        }
        
        let newObject = {}
        
        for (const property in response) {
          if (response[property].categories.indexOf("technology") > -1) {
            newObject[property] = response[property];
          }
        }
        
        console.log(newObject)
        

        【讨论】:

          猜你喜欢
          • 2019-05-29
          • 2022-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多