[英]JS + Lodash Filter an object on the basis of the value of a prop
我對JS很陌生,並在項目中使用lodash。 在這里,我有一個對象對象,我需要根據道具的值過濾掉這些對象。 我已經看過其他一些堆棧溢出文章,但無法獲得所需的輸出:
我的對象如下:
var parameters = {
"param_a": {
"created": "2018-10-08T05:14:19.498Z",
"description": "Description of the Parameter A",
"status": "absolute",
},
"param_b": {
"created": "2018-10-08T05:14:19.498Z",
"description": "Description of the Parameter B",
"status": "absolute",
},
"param_c": {
"created": "2018-10-08T05:14:19.498Z",
"description": "Description of the Parameter C",
"status": "relative",
},
}
我需要根據如下狀態獲取單獨的對象:
var absolute_parameters = {
"param_a": {
"created": "2018-10-08T05:14:19.498Z",
"description": "Description of the Parameter A",
"status": "absolute",
},
"param_b": {
"created": "2018-10-08T05:14:19.498Z",
"description": "Description of the Parameter B",
"status": "absolute",
},
}
var relative_parameters = {
"param_c": {
"created": "2018-10-08T05:14:19.498Z",
"description": "Description of the Parameter C",
"status": "relative",
},
}
我已經嘗試過了,但是它按原樣返回了原始對象:
relative_parameters = _.pickBy(parameters, function(value, key) {return 'relative';})
您可以通過lodash通過entries
+ filter
+ fromPairs
:
var parameters = { "param_a": { "created": "2018-10-08T05:14:19.498Z", "description": "Description of the Parameter A", "status": "absolute", }, "param_b": { "created": "2018-10-08T05:14:19.498Z", "description": "Description of the Parameter B", "status": "absolute", }, "param_c": { "created": "2018-10-08T05:14:19.498Z", "description": "Description of the Parameter C", "status": "relative", }, } const getByStatus = (s) => _(parameters).entries() .filter(([k,{status}]) => _.isEqual(status,s)).fromPairs().value() console.log(getByStatus('absolute')) console.log(getByStatus('relative'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
使用ES6,您可以使用Object.entries
+ Array.filter
+ Array.reduce
:
var parameters = { "param_a": { "created": "2018-10-08T05:14:19.498Z", "description": "Description of the Parameter A", "status": "absolute", }, "param_b": { "created": "2018-10-08T05:14:19.498Z", "description": "Description of the Parameter B", "status": "absolute", }, "param_c": { "created": "2018-10-08T05:14:19.498Z", "description": "Description of the Parameter C", "status": "relative", }, } const getByStatus = (s) => Object.entries(parameters) .filter(([k,{status}]) => status == s).reduce((r,[k,v]) => (r[k]=v,r),{}) console.log(getByStatus('absolute')) console.log(getByStatus('relative'))
在純Javascript中,您可以將一個對象作為結果集,然后將這些對象分配給所需的status
組
var data = { param_a: { created: "2018-10-08T05:14:19.498Z", description: "Description of the Parameter A", status: "absolute" }, param_b: { created: "2018-10-08T05:14:19.498Z", description: "Description of the Parameter B", status: "absolute" }, param_c: { created: "2018-10-08T05:14:19.498Z", description: "Description of the Parameter C", status: "relative" } }, absolute_parameters = {}, relative_parameters = {}; Object .entries(data) .reduce( (r, [k, o]) => (Object.assign(r[o.status], { [k]: o }), r), { absolute: absolute_parameters, relative: relative_parameters } ); console.log(absolute_parameters); console.log(relative_parameters);
.as-console-wrapper { max-height: 100% !important; top: 0; }
您已將此標簽為Ramda 。 如果可以接受Ramda答案(免責聲明:我是Ramda作者),則可以執行以下操作:
const parameters = {"param_a": {"created": "2018-10-08T05:14:19.498Z", "description": "Description of the Parameter A", "status": "absolute"}, "param_b": {"created": "2018-10-08T05:14:19.498Z", "description": "Description of the Parameter B", "status": "absolute"}, "param_c": {"created": "2018-10-08T05:14:19.498Z", "description": "Description of the Parameter C", "status": "relative"}} const [absolute_parameters, relative_parameters] = R.partition(R.propEq('status', 'absolute'), parameters) console.log(absolute_parameters) console.log(relative_parameters)
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
這取決於您的status
字段始終具有這兩個值之一。 您還可以使用filter
代替partition
來獨立創建它們,但要循環兩次:
const absolute_parameters = R.filter(R.propEq('status', 'absolute'), parameters)
const relative_parameters = R.filter(R.propEq('status', 'relative'), parameters)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.