javascript - 现有字段比较

标签 javascript underscore.js

如果我有一个对象数组并且需要在其中查找某些内容,我可以使用 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/

相关文章:

javascript - 检查元素的特殊值

javascript - 加载时引导过渡到最后一个 slider

对象定义时以逗号或分号结尾的Javascript语句

javascript - 有没有办法从应用程序脚本中的 graphql API 获取数据?

backbone.js - 无法循环 Backbone 集合

javascript - 正确更新 bootstrap-typeahead.js 中的 source Option

javascript - html 模板 vs 通过 js 推送代码

javascript - react-native-modal-dropdown 无法以编程方式更改所选内容

meteor - 将 Meteor 的 Underscore 升级到 1.7.0 是否安全?

javascript - 动态访问对象属性(附加字符串)