当前位置: 首页 > 面试题库 >

在对象数组上使用下划线的“差异”方法

越英范
2023-03-14
问题内容

_.difference([], [])

当我有原始类型数据时,此方法可以正常工作

var a = [1,2,3,4];
var b = [2,5,6];

然后_.difference(a,b)电话返回[1,3,4]

但是如果我使用像

var a = [{'id':1, 'value':10}, {'id':2, 'value':20}];
var b = [{'id':1, 'value':10}, {'id':4, 'value':40}];

似乎不起作用


问题答案:

原因很简单,具有相同内容的对象不是相同的对象,例如

var a = [{'id':1, 'value':10}, {'id':2, 'value':20}]; 
a.indexOf({'id':1, 'value':10})

它不会返回0而是返回-1,因为我们正在搜索其他对象

参见源代码underscore.js,_.difference使用_.contains

_.difference = function(array) {
  var rest = concat.apply(ArrayProto, slice.call(arguments, 1));
  return _.filter(array, function(value){ return !_.contains(rest, value); });
};

_.contains 最终使用indexOf,因此,除非它们指向同一个对象会找不到对象。

您可以_.contains通过遍历所有项并调用compare回调来改善下划线,您应该能够传递差异或包含函数,或者可以检查此版本以改进包含方法



 类似资料:
  • 我试图检查我收到的新数据对我持有的对象,我试图找出的是,如果他们的关键字的对象,我正在发送匹配的任何关键字的对象,我目前有。 所以我抓着一个物体就像 然后我收到一个单件物品 我想检查这个对象与对象数组(myObj),看看是否有任何东西与关键字“三”在里面(我不关心值,只是关键字匹配),所以我可以把它弹出到一个if语句分开就像- 我使用下划线。谢谢 编辑:对不起,这不清楚,我编辑它是为了澄清- 我握

  • 我的角度控制器中有两个函数,分别是loadForm和SaveForm。我想找出我的表单数组和我的新数组之间的差异。所以我使用了object Diff插件。这是我的数组预览,这是我的DiffObject结果预览:已更改数组 我必须通过递归函数只保存对象更改值。将值放入新数组。

  • 我在OpenGL中有一个立方体。我用旋转矩阵乘以立方体旋转。我还使用gluLookAt使相机在x轴上围绕立方体旋转,如下图所示。 哪里 我正在努力让相机在围绕y轴旋转的立方体上下旋转。

  • 问题内容: 在数组中对对象进行分组的最有效方法是什么? 例如,给定此对象数组: 我正在表格中显示此信息。我想对不同的方法进行分组,但是我想对这些值求和。 我将Underscore.js用于其groupby函数,这很有用,但并不能解决所有问题,因为我不希望它们“分裂”而是“合并”,更像SQL 方法。 我正在寻找的是能够总计特定值(如果要求)。 因此,如果我进行了groupby ,我希望收到: 如果我

  • 问题内容: 这些PHP代码行中的双下划线是什么意思? 问题答案: 看起来您正在使用Wordpress- 将__定义为转换字符串的函数(类似于及其别名,但具有用于显式指定域的可选参数)。