>

자바 스크립트의 키로 필터링하고 싶습니다.

ID를 전달하면 ajax 함수가 있습니다.  차례로 성공. obj1 의 모든 결과를 결합하고 싶습니다  단일 객체로 푸시합니다. 자바 스크립트에서 다음을 수행하는 방법

key

예상 출력 :

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

  • 답변 # 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

    이와 같은 일을 시도하십시오. 나는 당신의 키가 고정되어 있다고 가정합니다. 데모 링크를 클릭하십시오.

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

  • 이전 javascript - W3C Web Payments API를 통한 다자간 거래
  • 다음 css - 미디어 쿼리를 사용하는 MuiTab과 같은 구성 요소 재정의