相关疑难解决方法(0)

Lodash _.pluck怎么了?

我曾经用过Lodash _.pluck......我喜欢采摘...

实现Lodash不再支持pluck(从Lodash 4.x开始),我很难记住要使用的内容......

我去了文档,打了cmd-f,输入'pluck',但是我可怜的被遗弃的朋友甚至没有给出适当的提及......甚至没有'被'取代'......

有人可以提醒我,我应该使用什么?

javascript lodash

252
推荐指数
3
解决办法
10万
查看次数

两个对象之间的通用深度差异

我有两个对象:oldObjnewObj.

数据oldObj用于填充表单,newObj是用户更改此表单中的数据并提交数据的结果.

两个对象都很深,即.它们具有对象或对象数组等属性 - 它们可以是n级深度,因此diff算法需要是递归的.

现在我需要不只是从弄清楚什么改变(如添加/更新/删除)oldObjnewObj,却怎么也最能代表它.

到目前为止,我的想法只是构建一个genericDeepDiffBetweenObjects方法,它将返回表单上的对象,{add:{...},upd:{...},del:{...}}但后来我想:其他人必须先需要它.

那么......有没有人知道一个库或一段代码可以做到这一点,并且可能有更好的方式来表示差异(以一种仍然是JSON可序列化的方式)?

更新:

我想到了一种更好的方式来表示更新的数据,使用相同的对象结构newObj,但将所有属性值转换为表单上的对象:

{type: '<update|create|delete>', data: <propertyValue>}
Run Code Online (Sandbox Code Playgroud)

所以,如果newObj.prop1 = 'new value'oldObj.prop1 = 'old value'它会设置returnObj.prop1 = {type: 'update', data: 'new value'}

更新2:

当我们得到数组的属性时,它会变得非常毛茸茸,因为数组[1,2,3]应该被计算为等于[2,3,1],这对于基于值的类型的数组(如string,int和bool)来说非常简单,但是当涉及到它时,它实际上很难处理引用类型的数组,如对象和数组.

应该找到的示例数组相等:

[1,[{c: 1},2,3],{a:'hey'}] and [{a:'hey'},1,[3,{c: 1},2]]
Run Code Online (Sandbox Code Playgroud)

检查这种类型的深度值相等不仅非常复杂,而且还要找出一种表示可能的变化的好方法.

javascript compare object

194
推荐指数
12
解决办法
13万
查看次数

如何在对象上使用下划线的"交集"?

_.intersection([], [])
Run Code Online (Sandbox Code Playgroud)

只适用于原始类型,对吧?

它不适用于对象.如何使它与对象一起工作(可能通过检查"Id"字段)?

var a = [ {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'} ]
var b = [ {'id': 1, 'name': 'jake' }, {'id': 9, 'name': 'nick'} ]
Run Code Online (Sandbox Code Playgroud)

在此示例中,结果应为:

_.intersection(a, b);
Run Code Online (Sandbox Code Playgroud)

[{'id':1,'name':'jake'}];

javascript underscore.js

42
推荐指数
3
解决办法
4万
查看次数

两个数组的差异有1000万个项目 - _.difference太慢了

我有两个用户ID的数组,我想检查其中的不同项目.

arr1 = [123, 456, 789];
arr2 = [123, 456, 789, 098];
Run Code Online (Sandbox Code Playgroud)

问题是:这些阵列可能有10或2千万个项目.

我正在尝试,underscore.difference()但需要10分钟才能完成.

有没有更快的方法来做到这一点?

javascript node.js underscore.js

5
推荐指数
1
解决办法
1198
查看次数

数组对象差异javascript angularjs

我有2个数组对象,我想得到它们之间的区别如下:

array1 = [{"name":"MPCC","id":"tool:mpcc"}, {"name":"APP","id":"tool:app"}, {"name":"AII","id":"tool:aii"}, {"name":"VZZ","id":"tool:vzz"}, {"name":"USU","id":"tool:usu"}]

array2 = [{"name":"APP","id":"tool:app"}, {"name":"USU","id":"tool:usu"}]

result = [{"name":"MPCC","id":"tool:mpcc"}, {"name":"AII","id":"tool:aii"}, {"name":"VZZ","id":"tool:vzz"}]
Run Code Online (Sandbox Code Playgroud)

这是代码:

$scope.initial = function(base, userData){
    var result = [];
    angular.forEach( base, function(baseItem) {
        angular.forEach( userData, function( userItem ) {
            if ( baseItem.id !== userItem.id ) {
                if (result.indexOf(baseItem) < 0) { 
                    result.push(baseItem);
                }
            }
        });
    });
    return result;
}
$scope.initial(array1, array2);
Run Code Online (Sandbox Code Playgroud)

上面代码的问题是我得不到想要的结果.请告诉我出了什么问题.

javascript arrays object angularjs difference

5
推荐指数
1
解决办法
7731
查看次数

使用 underscore.js 查找对象的差异

所以我有两个 JSON 对象,我试图使用下划线 js 找出它们之间的区别。但是由于某种原因,它返回了整个对象而不是仅仅返回差异。我的目标是恢复模式,因为它是唯一不同的东西。

var a = {
        "name":"donor",
        "label":"Donor Data File (donor)",
        "pattern":"^donor(\\.[a-zA-Z0-9]+)?\\.txt(?:\\.gz|\\.bz2)?$"
};
var b = {
         "name":"donor",
         "label":"Donor Data File (donor)",
         "pattern":"^donor(\\.[a-zA-Z0-9]+)?\\.txt(?:\\.gz)?$"
};

console.log(_.difference(a,b));
Run Code Online (Sandbox Code Playgroud)

我不理解_.difference正确的用例吗?如果需要,这里有一个JSFiddle

javascript jquery underscore.js

1
推荐指数
1
解决办法
3380
查看次数