【问题标题】:Find specific key value in array of objects using nodejs使用nodejs在对象数组中查找特定键值
【发布时间】:2018-06-25 23:57:25
【问题描述】:
我们有一个像
这样的 JSON 对象
var jsons = {
"LAPTOP": [{
"productId": "123"
}],
"DESKTOP": [{
"productId": "456"
}],
"MOUSE": [{
"productId": "789"
}, {
"productId": "012"
}],
"KEY-BOARD": [{
"productId": "345"
}]
}
如果我们搜索 { "productId": "012" } 它应该返回键 DESKTOP
如果我们可以使用 lodash 那就太好了
【问题讨论】:
标签:
javascript
arrays
json
node.js
lodash
【解决方案1】:
使用 lodash 的解决方案:
let result = _(jsons)
.pickBy(item => _.some(item, {productId: '123'}))
.keys()
.head();
首先,我们找到值包含的键和具有匹配 productId 的对象。然后我们从键集合中取出第一个键。
【解决方案2】:
试试这个
var jsons = {
"LAPTOP": [{
"productId": "123"
}],
"DESKTOP": [{
"productId": "456"
}],
"MOUSE": [{
"productId": "789"
}, {
"productId": "012"
}],
"KEY-BOARD": [{
"productId": "345"
}]};
var result = Object.keys(jsons).find((key) => {
return jsons[key].find((item) => item.productId === '123')
});
console.log(result);
【解决方案3】:
没有LODASH,你也可以拥有这样的东西
var toSearch = 789;
Object.keys(jsons).forEach((key) => {
if(jsons[key].find((pid) => pid.productId == toSearch)){
console.log(key)
}
})
【解决方案4】:
var jsons = {
"LAPTOP": [{
"productId": "123"
}],
"DESKTOP": [{
"productId": "456"
}],
"MOUSE": [{
"productId": "789"
}, {
"productId": "012"
}],
"KEY-BOARD": [{
"productId": "345"
}]
};
var id = "789";
for(item in jsons){
jsons[item].forEach(function(data){
if(data.productId == id){
console.log(item);
}
});
}
【解决方案5】:
您可以像这样使用 Javascript 的 key in object for 循环语法:
var jsons = {
"LAPTOP": [{
"productId": "123"
}],
"DESKTOP": [{
"productId": "456"
}],
"MOUSE": [{
"productId": "789"
}],
"KEY-BOARD": [{
"productId": "345"
}]};
var searchFor = "789";
for(var key in jsons)
if(jsons.hasOwnProperty(key))
if(jsons[key][0] && jsons[key][0].productId === searchFor)
alert(key); // MOUSE
【解决方案6】:
您可以使用keys 和find。
var jsons = { "LAPTOP": [{ "productId": "123" }], "DESKTOP": [{ "productId": "456" }], "MOUSE": [{ "productId": "789" }, { "productId": "012" }], "KEY-BOARD": [{ "productId": "345" }] },
value = { "productId": "012" };
var result = _.find(_.keys(jsons), key => _.find(jsons[key], value));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
【解决方案7】:
考虑使用object-scan。一旦你把头绕在它周围,它就会很强大。
// const objectScan = require('object-scan');
const search = (term, input) => {
const r = objectScan(['**.productId'], {
abort: true,
rtn: 'key',
filterFn: ({ value }) => value === term
})(input);
return r === undefined ? r : r[0];
};
const jsons = { LAPTOP: [{ productId: '123' }], DESKTOP: [{ productId: '456' }], MOUSE: [{ productId: '789' }, { productId: '012' }], 'KEY-BOARD': [{ productId: '345' }] };
console.log(search('012', jsons));
// => MOUSE
.as-console-wrapper {max-height: 100% !important; top: 0}
<script src="https://bundle.run/object-scan@13.8.0"></script>
免责声明:我是object-scan的作者