严格的相等运算符将告诉您两个对象类型是否相等.但是,有没有办法判断两个对象是否相等,就像 Java中的哈希码值一样?
Stack Overflow问题JavaScript中是否有任何类型的hashCode函数?类似于这个问题,但需要更多的学术答案.上面的场景说明了为什么需要有一个,我想知道是否有任何等效的解决方案.
无论Object.assign和对象传播只能做一浅合并.
问题的一个例子:
// No object nesting
const x = { a: 1 }
const y = { b: 1 }
const z = { ...x, ...y } // { a: 1, b: 1 }
Run Code Online (Sandbox Code Playgroud)
输出是你所期望的.但是如果我试试这个:
// Object nesting
const x = { a: { a: 1 } }
const y = { a: { b: 1 } }
const z = { ...x, ...y } // { a: { b: 1 } }
Run Code Online (Sandbox Code Playgroud)
代替
{ a: …Run Code Online (Sandbox Code Playgroud) 假设我在JavaScript中有以下对象:
var object = {
"key1": "value1",
"key2": "value2",
"key3": "value3"
};
Run Code Online (Sandbox Code Playgroud)
如何找出对象中存在多少个值?
_.difference([], [])
Run Code Online (Sandbox Code Playgroud)
当我有原始类型数据时,这种方法工作正常
var a = [1,2,3,4];
var b = [2,5,6];
Run Code Online (Sandbox Code Playgroud)
并且_.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}];
Run Code Online (Sandbox Code Playgroud)
似乎不起作用
我希望能够获得两个JavaScript对象图之间所有差异的列表,以及发生增量的属性名称和值.
对于它的价值,这些对象通常作为JSON从服务器中检索,并且通常只有少数深层(即它可能是一个对象数组,它们本身具有数据,然后是与其他数据对象一起的数组).
我想不仅要看到基本属性的更改,还要看到数组成员数量的差异等.
如果我没有得到答案,我可能最终会自己写这篇文章,但希望有人已经完成了这项工作或者知道有人.
编辑:这些对象通常在结构上彼此非常接近,所以我们不是在讨论彼此完全不同的对象,而是可能有3或4个增量.
我在Javascript中有两个JSON对象,除了数值之外都是相同的.它看起来像这样:
var data = {
"eth0":{"Tx":"4136675","Rx":"13232319"},
"eth1":{"Tx":"4","Rx":"0"},
"lo":{"Tx":"471290","Rx":"471290"}
}
var old = {
"eth0":{"Tx":"4136575","Rx":"13232219"},
"eth1":{"Tx":"4","Rx":"0"},
"lo":{"Tx":"471290","Rx":"471290"}
}
Run Code Online (Sandbox Code Playgroud)
一个名为"data"的对象具有当前值,另一个名为"old"的对象具有1秒前的相同值.我想输出一个只有值更改的JSON对象,这样我就可以计算网络接口上的数据吞吐量.
var throughput = {
"eth0":{"Tx":"100","Rx":"100"},
"eth1":{"Tx":"0","Rx":"0"},
"lo":{"Tx":"0","Rx":"0"}
}
Run Code Online (Sandbox Code Playgroud)
我不确定如何遍历JSON数据 - 它可以用于任何数量的接口.
有人可以借给我一个手吗?提前致谢
对不起,我不知道怎么用短语来标题.请尽可能帮助编辑.
我有一个像这样的对象:
{
a: 'jack',
b: {
c: 'sparrow',
d: {
e: 'hahaha'
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想让它看起来像:
{
'a': 'jack',
'b.c': 'sparrow',
'b.d.e': 'hahaha'
}
// so that I can use it this way:
a['b.d.e']
Run Code Online (Sandbox Code Playgroud)
jQuery也可以.我知道嵌套对象,我可以用a.b.d.e得到hahaha,但是今天我不得不使用它像a['b.d.e']-_- !!! 我怎样才能做到这一点?提前致谢 :)
有人可以告诉我如何在比较这种情况时返回新数据。使用香草JavaScript。
{
"48": "{\"sid\":\"48\",\"name\":\"title 1\"}",
"77": "{\"sid\":\"77\",\"name\":\"The blahblah title\"}"
}
Run Code Online (Sandbox Code Playgroud)
与此相比
{
"48": "{\"sid\":\"48\",\"name\":\"title 1\"}",
"77": "{\"sid\":\"77\",\"name\":\"The blahblah title\"}",
"83": "{\"sid\":\"83\",\"name\":\"The blahblah derp\"}",
"87": "{\"sid\":\"87\",\"name\":\"The derpy title 4\"}"
}
Run Code Online (Sandbox Code Playgroud)
它应该只返回差异。
{
"83": "{\"sid\":\"83\",\"name\":\"The blahblah derp\"}",
"87": "{\"sid\":\"87\",\"name\":\"The derpy title 4\"}"
}
Run Code Online (Sandbox Code Playgroud) 我想同步数据,因此我有一个包含当前状态的数据对象.当这个改变时,我想在对象上设置一个属性,以便我可以在同步时通过它进行过滤.对象结构是:
data = {
type1: [
{a:"a", b:"b"},...
]
type2: [
{c:"c", d:"d"},...
]
}
Run Code Online (Sandbox Code Playgroud)
例如,如果data.type1 [0] .a ="test"将完成,我想将modified:true添加到对象,以便它将是
{a:"test", b:"b", modified:true}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过$ watch(data,function(),true)但是我找不到如何看到哪个对象被更改并且搜索给定的数据对象将是一个很大的开销.$ watchcollection(只是在寻找添加/删除时)也没有给出索引.
有没有办法找出哪个对象被改变了?或者是否有其他图书馆可以很好地做到这一点?
谢谢
编辑:
我创建了一个jsfiddle:https://jsfiddle.net/yfo8xwah/
我试图找出使用 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 ×10
object ×4
jquery ×2
json ×2
angularjs ×1
diff ×1
ecmascript-6 ×1
equals ×1
hashcode ×1