Как получить объект из массива вложенных объектов в JavaScript - PullRequest
0 голосов
/ 15 апреля 2019

Я хотел бы знать, как вернуть объект на основе country_name во входной объект, используя JavaScript. Входной объект как sampleobj и переменная source, переданные в качестве параметров функции, которая, в свою очередь, должна возвращать объект obj на основе source с использованием javascript,

Я попробовал это ниже

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

Ответы [ 4 ]

0 голосов
/ 15 апреля 2019

Используйте карту и фильтр и измените функцию следующим образом:

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)
0 голосов
/ 15 апреля 2019

Вы не можете использовать комбинацию map & filter.Карта вернет новый массив и внутри функции обратного вызова карты создаст и вернет объект с ключами id и country_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)
0 голосов
/ 15 апреля 2019

Вы можете использовать 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);
0 голосов
/ 15 апреля 2019

Вы можете использовать map и filter

С фильтром мы вынимаем только соответствующие 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...