繁体   English   中英

JavaScript 在作为数组的属性上过滤 Object

[英]JavaScript filtering Object on a property that is an array

我有以下有效载荷(小样本)从 api 作为 Object 返回。

{
"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"]
},

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

如何在 javascript 中执行此操作?

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

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

尝试是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM