фильтр по ключу в JavaScript - PullRequest
0 голосов
/ 27 мая 2019

Я хотел бы отфильтровать по ключу в javascript.

У меня есть функция ajax, при передаче идентификатора, obj1 приведет к успеху один за другим.Я хотел бы объединить все результаты на key и нажать на один объект.Как сделать следующее в javascript.

var id =["trans", "fund"]
setTimeout(()=>{
      id.map((e)=>this.static(e))
    }, 2000)

static(id){
var li = $.ajax({
           url: "/en",
          method: 'get',
          global: false,
          async: false,
          data: {
            providers: id
          },
          success: function (data) {
            return data;
          }
        }).responseText;
  var obj1=data; //I need to combine and store data in expected output format
}


//on first call
var obj1={
  country: "SG",
  trans: [{
    rate: 20,
    members: 100
  }]
}
//on second call
var obj1={
  country: "TH",
  fund: [{
    rate: 20,
    members: 100
  }]
}

Ожидаемый результат:

var result ={
  trans: [{
    rate: 20,
    members: 100
  }],
  fund: [{
    rate: 20,
    members: 100
  }]
}

Ответы [ 3 ]

0 голосов
/ 27 мая 2019

попробуйте сделать что-то подобное.Я предполагаю, что ваши ключи исправлены.нажмите на ссылку для демонстрации.

  var output = {};
  var id = ["trans", "fund"]

  //on first call
  var obj1 = {
    country: "SG",
    trans: [{
      rate: 20,
      members: 100
    }]
  }
  //on second call
  var obj2 = {
    country: "TH",
    fund: [{
      rate: 20,
      members: 100
    }]
  }

  function getObj(selectedId) {
    console.log(id); // global variable.
    if(!id) return;

    id.forEach(x => {
      let obj1Key = obj1[x];
      if (obj1Key) output[x] = obj1Key;

      let obj2Key = obj2[x];
      if (obj2Key) output[x] = obj2Key;
    })
   console.log('output object', output);
   console.log('JSON:', JSON.stringify(output));
  }
0 голосов
/ 27 мая 2019

Вы можете попробовать, как показано ниже, это объединит значения, если результат уже имеет значения

//
 var id =["trans", "fund"];
 var result = {};

 function getObj(obj){
   id.map(val => {
      if(result[val]) { result[val] = [...result[val], ...obj[val]]}
      else result[val] = obj[val]
   })
 }

//on first call
    var obj1={
      country: "SG",
      trans: [{
        rate: 20,
        members: 100
      }]
    }
    getObj(obj1)
/*
{
  trans: [{
    rate: 20,
    members: 100
  }]
}
*/

    //on second call
    var obj1={
      country: "TH",
      fund: [{
        rate: 20,
        members: 100
      }]
    }
getObj(obj2)
/*
{
  trans: [{
    rate: 20,
    members: 100
   }],
   fund: [{
     rate: 20,
     members: 100
   }]
}
*/
0 голосов
/ 27 мая 2019

Попробуйте это:

var id =["trans", "fund"];
var result = {};
//on first call
var obj1={
    country: "SG",
    trans: [{
        rate: 20,
        members: 100
    }]
}
result = getObj(result,obj1);
//on second call
var obj1={
    country: "TH",
    fund: [{
        rate: 20,
        members: 100
    }]
}
result = getObj(result,obj1);
console.log(result);

function getObj(result,obj){
    for (let i = 0; i < id.length; i++) {
        if (obj[id[i]]) {
            result[id[i]] =  obj[id[i]];
            return result;
        }
    }
    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...