【问题标题】:Filtering the Array Object by Matching SubObject values通过匹配子对象值过滤数组对象
【发布时间】:2017-11-16 19:14:55
【问题描述】:

我有一个对象数组:

sampledata = [{
    "id": 1,
    "parameter": {
        "Num_Of_Floors":"2",
        "East":"10",
        "Window_Type":"Window Type 1"
    },
    "energy": -145.9,
    "pv": 83.72
}, {
    "id2": 2,
    "parameter": {
        "Num_Of_Floors":"2",
        "East":"10",
        "Window_Type":"Window Type 2"
    },  
    "energy": -145.9,
    "pv": 83.72
}];

如果该对象的 parameter 值与给定输入匹配,我想获取该对象的一些属性。

我试过了:

let x={Num_Of_Floors: "2", East: "10", Window_Type: "Window Type 1"}
return this.sampledata.filter(data=> data['parameter']===x) 

基于匹配的parameter 对象,我想从数组对象返回energypv 属性。 结果:

{
 "energy": -145.9,
  "pv": 83.72
}

谁能建议我如何过滤我的数据?

【问题讨论】:

    标签: javascript jquery array-filter arrayobject


    【解决方案1】:

    在filter方法中,使用array#every比较sampedatax的每个值,然后使用array#map得到pvenergy

    const sampledata = [{ "id": 1, "parameter": { "Num_Of_Floors":"2", "East":"10", "Window_Type":"Window Type 1" }, "energy": -145.9, "pv": 83.72 }, { "id2": 2, "parameter": { "Num_Of_Floors":"2", "East":"10", "Window_Type":"Window Type 2" }, "energy": -145.9, "pv": 83.72
    }];
    
    let x= { Num_Of_Floors: "2", East: "10", Window_Type: "Window Type 1"}
    
    var result = sampledata
                  .filter(obj => Object
                    .keys(obj.parameter)
                    .every(k => obj.parameter[k] === x[k]))
                  .map(({energy,pv}) => ({energy,pv}));
                  
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

    • :非常感谢您的快速响应..它工作正常。但是假设我们有这么多属性能量,pv,...等等,那么我们需要像你一样映射每个属性你的地图..或者有没有其他方法请建议
    • 如果你想映射所有属性,你可以返回对象,否则你必须单独映射属性
    • 很高兴为您提供帮助
    【解决方案2】:

    使用Array#every 迭代xkeys,并检查所有x 值是否等于parameter 的相同值。过滤对象后,map数组的对象为需要的格式:

    const data = [{"id":1,"parameter":{"Num_Of_Floors":"2","East":"10","Window_Type":"Window Type 1"},"energy":-145.9,"pv":83.72},{"id2":2,"parameter":{"Num_Of_Floors":"2","East":"10","Window_Type":"Window Type 2"},"energy":-145.9,"pv":83.72}];
    
    const x = {Num_Of_Floors: "2", East: "10", Window_Type: "Window Type 1"};
    
    const result = data.filter(({ parameter }) =>       
      Object.keys(x).every((key) => x[key] === parameter[key]))
      .map(({ energy, pv }) => ({ energy, pv }));
      
    console.log(result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 2020-09-17
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      • 2019-02-08
      相关资源
      最近更新 更多