【问题标题】:How to get object from nested object array in javascript如何从javascript中的嵌套对象数组中获取对象
【发布时间】:2019-04-15 04:04:14
【问题描述】:

我想知道如何使用javascript在输入对象中返回基于country_name的对象。 输入对象为sampleobj 和变量source,作为参数传递给函数,该函数又应使用javascript 返回基于source 的输出obj,

我在下面试过这个

var source="TH";
var result = filterData(sampleobj, source);
function filterData(inputobj, src){
var filterByCountry = inputobj.filter((e)=>e.country_from.country.includes(src));
return filterByCountry;
}
var sampleobj = [
   {
     id: "trans",
     country_from: [
       {
         country: "SG"
         currency: ["SGD", "USD"]
       },
       {
         country: "TH"
         currency: ["THB", "USD"]
       }

     ]
   },
    {
     id: "fund",
     country_from: [
       {
         country: "TH"
         currency: ["THB", "USD"]
       },
       {
         country: "UK"
         currency: ["GBP", "USD"]
       }
     ]
   }
]


预期输出:

result =[{
     id: "trans",
     country_from: [
       {
         country: "TH"
         currency: ["THB", "USD"]
       }
     ]
},
{
     id: "fund",
     country_from: [
       {
         country: "TH"
         currency: ["THB", "USD"]
       }
     ]
}]

【问题讨论】:

    标签: javascript jquery arrays object


    【解决方案1】:

    您可以使用mapfilter

    使用过滤器,我们只取出匹配的country 并将其作为country_from's 值放回

    let sampleobj = [{id: "trans",country_from: [{country: "SG",currency: ["SGD", "USD"]},{country: "TH",currency: ["THB", "USD"]}]},
    {id: "fund",country_from: [{country: "TH",currency: ["THB", "USD"]},{country: "UK",currency: ["GBP", "USD"]}]}]
    
    const source = 'TH'
    
    const op = sampleobj.map(inp=>{
      const country_from = inp.country_from.filter(({country})=> country === source)
      return {
        ...inp,
        country_from
      }  
    })
    
    console.log(op)

    【讨论】:

      【解决方案2】:

      您可以使用mapfilter 的组合。 map 将返回一个新数组,并在 map 回调函数中创建并返回一个带有键 idcountry_from 的对象。在填充country_from 的值时,使用filter 仅提取国家为“TH”的对象

      var sampleobj = [{
          id: "trans",
          country_from: [{
              country: "SG",
              currency: ["SGD", "USD"]
            },
            {
              country: "TH",
              currency: ["THB", "USD"]
            }
      
          ]
        },
        {
          id: "fund",
          country_from: [{
              country: "TH",
              currency: ["THB", "USD"]
            },
            {
              country: "UK",
              currency: ["GBP", "USD"]
            }
          ]
        }
      ]
      
      let result = sampleobj.map(function(item) {
      
        return {
          id: item.id,
          country_from: item.country_from.filter(function(elem) {
            return elem.country === 'TH'
          })
        }
      })
      console.log(result)

      【讨论】:

        【解决方案3】:

        您可以使用map 循环遍历数组并使用filter 过滤country_from

        var sampleobj = [{"id":"trans","country_from":[{"country":"SG","currency":["SGD","USD"]},{"country":"TH","currency":["THB","USD"]}]},{"id":"fund","country_from":[{"country":"TH","currency":["THB","USD"]},{"country":"UK","currency":["GBP","USD"]}]}];
        
        var source = "TH";
        let result = sampleobj.map(({id,country_from}) =>  ({id,country_from: country_from.filter(o => o.country === source)}));
        
        console.log(result);

        您可以添加另一个filter() 以仅返回带有country_from 的对象

        var sampleobj = [{
            "id": "trans",
            "country_from": [{
              "country": "SG",
              "currency": ["SGD", "USD"]
            }, {
              "country": "TH",
              "currency": ["THB", "USD"]
            }]
          },
          {
            "id": "fund",           //Will not be returned since no TH on country_from
            "country_from": [{
              "country": "ID",
              "currency": ["THB", "USD"]
            }, {
              "country": "UK",
              "currency": ["GBP", "USD"]
            }]
          } 
        ]
        
        var source = "TH";
        let result = sampleobj.map(({id,country_from}) => ({id,country_from: country_from.filter(o => o.country === source)}))
          .filter(o => o.country_from.length);
        
        console.log(result);

        【讨论】:

          【解决方案4】:

          使用 Map & Filter 并更改功能如下:

          function filterData(inputobj, src) {
                  var filterByCountry = inputobj.map(({
                      id, country_from
                  }) => ({
                      id, country_from: country_from.filter(obj => obj.country.includes(src))
                  }));
                  return filterByCountry;
              }
               var sampleobj = [
                      {
                          id: "trans"
                          , country_from: [
                              {
                                  country: "SG"
                                  , currency: ["SGD", "USD"]
                 }
                              , {
                                  country: "TH"
                                  , currency: ["THB", "USD"]
                 }
          
               ]
             }
                      , {
                          id: "fund"
                          , country_from: [
                              {
                                  country: "TH"
                                  , currency: ["THB", "USD"]
                 }
                              , {
                                  country: "UK"
                                  , currency: ["GBP", "USD"]
                 }
               ]
             }
          ]
                  var source = "TH";
                  var result = filterData(sampleobj, source);
                  console.log(result)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-09-21
            • 2016-07-23
            • 2020-12-07
            • 2018-10-14
            • 2016-01-01
            • 2021-11-29
            • 1970-01-01
            相关资源
            最近更新 更多