2017-10-03 4 views
0

私はオブジェクト内のキーの値を使ってフィルタリングしたいオブジェクトのオブジェクトを持っています。たとえば、私のオブジェクトは次のようになります。フィルタを使用したJSオブジェクトの破棄

const Financials = { 
    xxxxx: { 
    creditid: "yyyy", 
    aggRevs: 2000, 
    aggexpenses: 1000, 
    dateOf: 12/31/2015 
    }, 
    zzzz: { 
    creditid: "yyyy", 
    aggRevs: 1000, 
    aggexpenses: 1000, 
    dateOf: 12/31/2016 
    }, 
    aaaa: { 
    creditid: "bbbb", 
    aggRevs: 1000, 
    aggexpenses: 1000, 
    dateOf: 12/31/2016 
    } 
}; 

私はcreditidでオブジェクトをフィルタリングできるようにします。たとえば、 "yyyy"というクレジットIDを持つすべてのオブジェクトを含むオブジェクトを返したいとします。

var { creditid: "yyyy" } = Financials; 

そして結果は次のようになります。

{ 
    xxxxx: { 
    creditid: "yyyy", 
    aggRevs: 2000, 
    aggexpenses: 1000, 
    dateOf: 12/31/2015 
    }, 
    zzzz: { 
    creditid: "yyyy", 
    aggRevs: 1000, 
    aggexpenses: 1000, 
    dateOf: 12/31/2016 
    } 
} 

はこの可能使用して非構造ですか?次のようにあなたは、財務の各プロパティを反復処理する必要があることについては

+0

は 'これを可能に使用した非構造です' - ?私は考えていませんのo。オブジェクトを深くコピーするか、含まれているオブジェクトをコピーしませんか?元の「財務」の編集は、「const」なのではないと思います。 – ASDFGerte

+0

私はオリジナルを編集したいです。私は、更新する/しようとしているの一致するキーと値のペアを持つオブジェクトを編集します。私は、破壊が、それを試みるためのきれいな方法かもしれないと考えました。 – Vince

+1

'私はcreditidに一致するキー/値ペアを持つオブジェクトを更新/編集しようとしています - これは[XY問題]です(https://meta.stackexchange.com/questions/66377/what-is-the -xy-problem)? – ASDFGerte

答えて

0

を限り非構造が行くように、私は、非構造がより.map()のように働くという理由だけで、これを行うことができることを知りません.filter()より。ただし、実際にそうように、.reduce()機能でかなり簡単にこれを行うことができます。

const Financials = { 
 
    xxxxx: { 
 
    creditid: "yyyy", 
 
    aggRevs: 2000, 
 
    aggexpenses: 1000, 
 
    dateOf: 12/31/2015 
 
    }, 
 
    zzzz: { 
 
    creditid: "yyyy", 
 
    aggRevs: 1000, 
 
    aggexpenses: 1000, 
 
    dateOf: 12/31/2016 
 
    }, 
 
    aaaa: { 
 
    creditid: "bbbb", 
 
    aggRevs: 1000, 
 
    aggexpenses: 1000, 
 
    dateOf: 12/31/2016 
 
    } 
 
}; 
 

 
var filtered = Object.keys(Financials).reduce((res, key) => { 
 
    if (Financials[key].creditid === "yyyy") { 
 
    res[key] = Financials[key] 
 
    } 
 
    return res; 
 
}, {}); 
 

 
console.log(filtered);

0

const Financials = { 
    xxxxx: { 
    creditid: "yyyy", 
    aggRevs: 2000, 
    aggexpenses: 1000, 
    dateOf: '12/31/2015' 
    }, 
    zzzz: { 
    creditid: "yyyy", 
    aggRevs: 1000, 
    aggexpenses: 1000, 
    dateOf: '12/31/2016' 
    }, 
    aaaa: { 
    creditid: "bbbb", 
    aggRevs: 1000, 
    aggexpenses: 1000, 
    dateOf: '12/31/2016' 
    } 
}; 

var resultFinancials = {}; 

for (var financial in Financials) { 
    if (Financials.hasOwnProperty(financial)) { 
     if(Financials[financial] && Financials[financial].creditid =='yyyy'){ 
      resultFinancials[financial] = Financials[financial]; 
     } 
    } 
} 

console.log(resultFinancials) 
0

あなただけのオブジェクトのエントリをフィルタし、新しいオブジェクトに戻って、それをマップすることができ

const Financials = { 
 
    xxxxx: { 
 
    creditid: "yyyy", 
 
    aggRevs: 2000, 
 
    aggexpenses: 1000, 
 
    dateOf: 12/31/2015 
 
    }, 
 
    zzzz: { 
 
    creditid: "yyyy", 
 
    aggRevs: 1000, 
 
    aggexpenses: 1000, 
 
    dateOf: 12/31/2016 
 
    }, 
 
    aaaa: { 
 
    creditid: "bbbb", 
 
    aggRevs: 1000, 
 
    aggexpenses: 1000, 
 
    dateOf: 12/31/2016 
 
    } 
 
}; 
 

 
let arr = Object.entries(Financials).filter(set => set[1].creditid === "yyyy"); 
 
let result = Object.assign(...arr.map(d => ({[d[0]]: d[1]}))) 
 

 
console.log(result)
.as-console-wrapper {top:0; max-height: 100%!important}

関連する問題