簡體   English   中英

JS + Lodash根據道具的值過濾對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM