如果我有一个对象数组并且需要在其中查找某些内容,我可以使用 underscore/lodash 的 find
函数
let part = { id: 'foo' };
_.find(arr, p => p.id === part.id);
这很容易。现在多个属性怎么样?
let part = { id: 'foo', name: 'part foo' };
_.find(arr, p => p.id === part.id && p.name === part.name);
但是坚持住。如果我需要一个首先按 id
进行比较的函数,然后如果 name
存在,则按 name
进行比较,然后可能按其他字段进行比较,该怎么办存在于 part
中。这样做似乎不对:
_.find(arr, p => {
return p.id === part.id
&& (part.name && p.name === part.name)
&& (part.title && p.title === part.title);
});
如果 title
存在而 name
不存在,则无法找到零件。
另外,如果我有更长的属性列表需要比较,我可以避免函数体臃肿吗?
最佳答案
试试这个:
return p.id === part.id
&& (!part.name || p.name === part.name)
&& (!part.title || p.title === part.title);
这样做会使其将 part
中不存在的任何属性视为匹配,因此它只对存在的属性进行真正的比较。
此缩写语法还假设 part.X
的有效值绝不会为假。您可以通过以下方式使其更安全:
return p.id === part.id
&& (!part.hasOwnProperty("name") || p.name === part.name)
&& (!past.hasOwnProperty("title") || p.title == part.title);
关于javascript - 现有字段比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34425046/