【问题标题】:filter by key in javascript在javascript中按键过滤
【发布时间】:2019-05-27 04:50:51
【问题描述】:

我想在javascript中按键过滤。

我有一个 ajax 函数,在传递 id 时,将导致 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
  }]
}

【问题讨论】:

  • 你想合并这两个对象吗?
  • obj1 是如何存储在每个连续调用中的?它会替换它之前的值吗?
  • 你能把问题说清楚吗?
  • @Harish 更新代码

标签: javascript jquery arrays object


【解决方案1】:

试试这个:

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;
}

【讨论】:

    【解决方案2】:

    尝试做这样的事情。我假设你的钥匙是固定的。点击link进行演示。

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

    【讨论】:

      【解决方案3】:

      您可以尝试如下,如果结果已经有值,这将合并值

      //
       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
         }]
      }
      */
      

      【讨论】:

        猜你喜欢
        • 2021-08-26
        • 1970-01-01
        • 2021-07-22
        • 1970-01-01
        • 2022-01-12
        • 2016-05-24
        • 1970-01-01
        • 2018-07-17
        • 2022-06-13
        相关资源
        最近更新 更多