如何使用 loash 从 Array 中查找和返回对象?

我的目标:

[
{
description: 'object1', id: 1
},
{
description: 'object2', id: 2
}
{
description: 'object3', id: 3
}
{
description: 'object4', id: 4
}
]

在下面的函数中,我传入描述来查找匹配的 ID:

function pluckSavedView(action, view) {
console.log('action: ', action);
console.log('pluckSavedView: ', view);  // view = 'object1'


var savedViews = retrieveSavedViews();
console.log('savedViews: ', savedViews);


if (action === 'delete') {
var delete_id = _.result(_.find(savedViews, function(description) {
return description === view;
}), 'id');


console.log('delete_id: ', delete_id); // should be '1', but is undefined
}
}

我正在尝试使用 loash 的 find 方法: https://lodash.com/docs#find

但是我的变量 delete_id是未定义的。


更新 对于检查这个问题的人来说,Ramda 是一个很好的库,可以做和 loash 一样的事情,但是以一种更加函数化的编程方式:) Http://ramdajs.com/0.21.0/docs/

423902 次浏览

传递给回调的参数是数组的元素之一。数组的元素是形式为 {description: ..., id: ...}的对象。

var delete_id = _.result(_.find(savedViews, function(obj) {
return obj.description === view;
}), 'id');

另一个来自您链接到的文档的替代方案(loash v3) :

_.find(savedViews, 'description', view);

Lodash v4:

_.find(savedViews, ['description', view]);

使用 find方法,您的回调函数将传递每个元素的值,如:

{
description: 'object1', id: 1
}

因此,您需要这样的代码:

_.find(savedViews, function(o) {
return o.description === view;
})

你可以很容易地在香草 JS 中做到这一点:

使用 find:

const savedViews = [{"description":"object1","id":1},{"description":"object2","id":2},{"description":"object3","id":3},{"description":"object4","id":4}];


const view = 'object2';


const delete_id = savedViews.find(obj => {
return obj.description === view;
}).id;


console.log(delete_id);

使用 filter(原答案) :

const savedViews = [{"description":"object1","id":1},{"description":"object2","id":2},{"description":"object3","id":3},{"description":"object4","id":4}];


const view = 'object2';


const delete_id = savedViews.filter(function (el) {
return el.description === view;
})[0].id;


console.log(delete_id);

var delete_id = _(savedViews).where({ description : view }).get('0.id')

洛达什和 ES5

var song = _.find(songs, {id:id});

洛达什和 ES6

let song = _.find(songs, {id});

https://lodash.com/docs#find的医生

您可以使用以下内容

import { find } from 'lodash'

然后从列表中返回整个对象(不仅仅是它的键或值) ,具体如下:

let match = find(savedViews, { 'ID': 'id to match'});

您不需要 Lodash 或 Ramda 或任何其他额外的依赖项

只需以函数的方式使用 ES6 find ()函数:

savedViews.find(el => el.description === view)

有时候你需要使用第三方库来获得所有的好东西。但是,一般来说,尽量避免依赖 当你不需要他们的时候。依赖关系可以:

  • 膨胀你捆绑的代码大小,
  • 你必须及时更新,
  • 它们可能会引入错误或安全风险

为此,在 Array 中查找给定的 Object,这是 _. find 的一个基本用法示例

const array =
[
{
description: 'object1', id: 1
},
{
description: 'object2', id: 2
},
{
description: 'object3', id: 3
},
{
description: 'object4', id: 4
}
];

这会很有用的

q = _.find(array, {id:'4'}); // delete id


console.log(q); // {description: 'object4', id: 4}

我不知道。Find 将有助于返回数组中的元素,而不是它的索引。因此,如果您有一个对象数组,并且希望通过某个键值 pare_ 在数组中找到一个对象。找到适合这项工作的工具。

根据名称获取 ID

 {
"roles": [
{
"id": 1,
"name": "admin",
},
{
"id": 3,
"name": "manager",
}
]
}






fetchIdBasingOnRole() {
const self = this;
if (this.employee.roles) {
var roleid = _.result(
_.find(this.getRoles, function(obj) {
return obj.name === self.employee.roles;
}),
"id"
);
}
return roleid;
},

导入 lodash

$npm i ——保存 loash

var _ = require('lodash');


var objArrayList =
[
{ name: "user1"},
{ name: "user2"},
{ name: "user2"}
];


var Obj = _.find(objArrayList, { name: "user2" });


// Obj ==> { name: "user2"}