NodeJS按键的值查找数组中的对象

时间:2016-03-28 09:57:45

标签: javascript arrays node.js lodash

我试图通过其中一个键的值来获取数组中的对象。

数组:

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');

并返回一个空对象。

关于如何以lodash的方式做到这一点的任何想法(如果它甚至可能)?我可以用经典的方式做到这一点,创建一个新的数组,循环遍历所有对象,并将符合我标准的那些对象推送到新数组。但有没有办法用lodash做到这一点?

这不重复。

4 个答案:

答案 0 :(得分:53)

您可以将Array.prototype.find()与纯javascript:

一起使用
var picked = arr.find(o => o.city === 'Amsterdam');

目前所有浏览器都不是compatible,您需要在您的环境中检查它(但它应该在NodeJS中运行)。

答案 1 :(得分:11)

使用lodash和箭头功能,它应该像;

一样简单
var picked = lodash.filter(arr, x => x.city === 'Amsterdam');

...或者以对象表示法交替使用;

var picked = lodash.filter(arr, { 'city': 'Amsterdam' } );

注意:上述答案过去基于pickBy,正如@torazaburo在下面指出的那样不是用例的好选择。

答案 2 :(得分:4)

经典方式更简单

var output = arr.filter(function(value){ return value.city=="Amsterdam";})

答案 3 :(得分:1)

您可以使用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>");
&#13;
&#13;
&#13;