相关疑难解决方法(0)

JavaScript中的对象比较

在JavaScript中比较对象的最佳方法是什么?

例:

var user1 = {name : "nerd", org: "dev"};
var user2 = {name : "nerd", org: "dev"};
var eq = user1 == user2;
alert(eq); // gives false
Run Code Online (Sandbox Code Playgroud)

我知道如果它们引用完全相同的对象,则两个对象是相等的,但有没有办法检查它们是否具有相同的属性值?

以下方式对我有用,但这是唯一的可能性吗?

var eq = Object.toJSON(user1) == Object.toJSON(user2);
alert(eq); // gives true
Run Code Online (Sandbox Code Playgroud)

javascript comparison object object-comparison

1021
推荐指数
7
解决办法
85万
查看次数

如何在Javascript中获取两个数组之间的差异?

有没有办法在JavaScript中返回两个数组之间的差异?

例如:

var a1 = ['a', 'b'];
var a2 = ['a', 'b', 'c', 'd'];

// need ["c", "d"]
Run Code Online (Sandbox Code Playgroud)

任何建议都非常感谢.

javascript arrays array-difference

660
推荐指数
25
解决办法
51万
查看次数

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

我有两个对象: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万
查看次数

使用es6从两个对象中获取差异对象

我试图找出使用 es6 获取两个对象之间的交集对象的最佳方法是什么。我的意思是:

a = {a:'a',b:'b',c:'c', d:'d'};
b = {a:'a',b: '1', c:'c', d:'2', f'!!!'}
// result I want:
c = getDifference(a,b)
//c is now: {b:'1', d:'2'}
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以使用 es6 来做到这一点,或者我是否需要使用 for(in) 和 Object.keys() 迭代 a 对象并进行比较,将交集分配给 c?

(a,b) => {
    const c = {};
    for(const _key in Object.keys(a)){
       if(b[_key] && b[_key] !== a[_key]){
           c[_key] = b[_key];
       }
    }
    return c;
}
Run Code Online (Sandbox Code Playgroud)

我知道 loadash/underscore 有这些类型的辅助函数...但是尝试看看 es6 是否有任何新的短语法,如果没有,使用 vanilla js 执行此操作的最短方法是什么。

javascript object ecmascript-6 ecmascript-2016

5
推荐指数
2
解决办法
9631
查看次数