NodeJS 通过键的值在数组中查找对象
NodeJS find object in array by value of a key
我正在尝试通过其中一个键的值获取数组中的对象。
数组:
var arr = [
{
city: 'Amsterdam',
title: 'This is Amsterdam!'
},
{
city: 'Berlin',
title: 'This is Berlin!'
},
{
city: 'Budapest',
title: 'This is Budapest!'
}
];
我尝试用 lodash
做类似的事情,但没有成功。
var picked = lodash.pickBy(arr, lodash.isEqual('Amsterdam');
它 returns 是一个空对象。
关于如何以 lodash 方式执行此操作的任何想法(如果可能的话)?我可以用经典的方式来做,创建一个新数组,遍历所有对象并将符合我的条件的对象推送到新数组。但是有没有办法用 lodash 做到这一点?
这不是重复的。
经典方式更简单
尝试
var output = arr.filter(function(value){ return value.city=="Amsterdam";})
您可以将 Array.prototype.find() 与纯 javascript:
一起使用
var picked = arr.find(o => o.city === 'Amsterdam');
目前还compatible所有浏览器,您需要在您的环境中检查它(但它应该在 NodeJS 中工作)。
您可以使用Array.filter
正如@torazaburo 所指出的,您不需要三元运算符return item[key]?item[key] === value:false
。一个简单的检查 return item[key] === value
就可以了。
var arr = [{
city: 'Amsterdam',
title: 'This is Amsterdam!'
}, {
city: 'Berlin',
title: 'This is Berlin!'
}, {
city: 'Budapest',
title: 'This is Budapest!'
}];
Array.prototype.findByValueOfObject = function(key, value) {
return this.filter(function(item) {
return (item[key] === value);
});
}
document.write("<pre>" + JSON.stringify(arr.findByValueOfObject("city", "Amsterdam"), 0, 4) + "</pre>");
使用 lodash 和箭头函数,应该很简单;
var picked = lodash.filter(arr, x => x.city === 'Amsterdam');
...或者使用对象表示法;
var picked = lodash.filter(arr, { 'city': 'Amsterdam' } );
注意:上面的答案曾经基于 pickBy
,正如@torazaburo 在下面指出的那样,这对于用例来说不是一个好的选择。
我正在尝试通过其中一个键的值获取数组中的对象。
数组:
var arr = [
{
city: 'Amsterdam',
title: 'This is Amsterdam!'
},
{
city: 'Berlin',
title: 'This is Berlin!'
},
{
city: 'Budapest',
title: 'This is Budapest!'
}
];
我尝试用 lodash
做类似的事情,但没有成功。
var picked = lodash.pickBy(arr, lodash.isEqual('Amsterdam');
它 returns 是一个空对象。
关于如何以 lodash 方式执行此操作的任何想法(如果可能的话)?我可以用经典的方式来做,创建一个新数组,遍历所有对象并将符合我的条件的对象推送到新数组。但是有没有办法用 lodash 做到这一点?
这不是重复的。
经典方式更简单
尝试
var output = arr.filter(function(value){ return value.city=="Amsterdam";})
您可以将 Array.prototype.find() 与纯 javascript:
一起使用var picked = arr.find(o => o.city === 'Amsterdam');
目前还compatible所有浏览器,您需要在您的环境中检查它(但它应该在 NodeJS 中工作)。
您可以使用Array.filter
正如@torazaburo 所指出的,您不需要三元运算符return item[key]?item[key] === value:false
。一个简单的检查 return item[key] === value
就可以了。
var arr = [{
city: 'Amsterdam',
title: 'This is Amsterdam!'
}, {
city: 'Berlin',
title: 'This is Berlin!'
}, {
city: 'Budapest',
title: 'This is Budapest!'
}];
Array.prototype.findByValueOfObject = function(key, value) {
return this.filter(function(item) {
return (item[key] === value);
});
}
document.write("<pre>" + JSON.stringify(arr.findByValueOfObject("city", "Amsterdam"), 0, 4) + "</pre>");
使用 lodash 和箭头函数,应该很简单;
var picked = lodash.filter(arr, x => x.city === 'Amsterdam');
...或者使用对象表示法;
var picked = lodash.filter(arr, { 'city': 'Amsterdam' } );
注意:上面的答案曾经基于 pickBy
,正如@torazaburo 在下面指出的那样,这对于用例来说不是一个好的选择。