使用lodash获取嵌套对象属性

时间:2018-02-21 09:20:31

标签: javascript object ecmascript-6 nested lodash

我是一个带有国家/地区代码的嵌套对象。我需要根据条件使用lodash获取相应的货币属性。

我是lodash的新手,不知道我可以在这里使用哪种方法。

例如, 当我搜索countryCode' AU'的相应货币时,它应该返回' AUD'。

目前,我得到了整个对象。

我该如何完成这项工作?



var myJSON = {
  "countryCode": {
  "Australia": "AU",
  "United States": "US",
  "Britain": "GB",
  "Japan": "JP",
  "India": "IND",
  "France": "FR",
  "Russia": "RS"
},
"countries": {
  "AE": {
    "currencies": {
    "AED": {
      "isDefault": true
    }
    }
  },
  "AL": {
    "currencies": {
    "ALL": {
      "isDefault": true
    }
    }
  },
  "AU": {
    "currencies": {
    "AUD": {
      "isDefault": true
    }
    }
  },
  "US": {
    "currencies": {
    "USD": {
      "isDefault": true
    }
    }
  },
  "GB": {
    "currencies": {
    "EUR": {
      "isDefault": true
    }
    }
  },
  "FR": {
    "currencies": {
    "EUR": {
      "isDefault": true
    }
    }
  },
  "JP": {
    "currencies": {
    "JPY": {
      "isDefault": true
    }
    }
  },
  "RS": {
    "currencies": {
    "RSD": {
      "isDefault": false
    }
    }
  },
  "ZA": {
    "currencies": {
    "ZAR": {
      "isDefault": true
    }
    }
  }
  }
};

function getData() {
 var countryCode = ['AU', 'ZA', 'JP'];
 console.log(_.pick(myJSON.countries, countryCode));
 console.log(_.values(_.pick(myJSON.countries, countryCode)));	
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.core.js"></script>
<button onclick="getData()">Get Data</button>
&#13;
&#13;
&#13;

电流输出: {AU:{...},ZA:{...},JP:{...}}

期望的输出:

[&#39; AUD&#39;,&#39; ZAR&#39;,&#39; JP&#39;]

以下是代码:

3 个答案:

答案 0 :(得分:1)

  

当我搜索countryCode&#39; AU&#39;的相应货币时,   它应该返回&#39; AUD&#39;。

尝试使用此vanila js解决方案,使用map

var countryCode = ['AU', 'ZA', 'JP'];
var output = countryCode.map( s => Object.keys( myJSON.countries[ s ].currencies[ 0 ] ) );

答案 1 :(得分:1)

执行此操作的方式如下:

&#13;
&#13;
function getData() {
 var countryCode = ['AU', 'ZA', 'JP'];
 console.log(
   _(myJSON.countries)
    .pick(countryCode)
    .values()
    .map(function(value) { return _.keys(value.currencies)[0]; })
    .value()
 );	
}
&#13;
&#13;
&#13;

答案 2 :(得分:0)

Pick会按照要求去做。

而是这样做:

countryCode.map((ct) => Object.keys(myJSON.countries[ct].currencies)[0]);