严格的相等运算符将告诉您两个对象类型是否相等.但是,有没有办法判断两个对象是否相等,就像 Java中的哈希码值一样?
Stack Overflow问题JavaScript中是否有任何类型的hashCode函数?类似于这个问题,但需要更多的学术答案.上面的场景说明了为什么需要有一个,我想知道是否有任何等效的解决方案.
我需要按键对JavaScript对象进行排序.
因此如下:
{ 'b' : 'asdsad', 'c' : 'masdas', 'a' : 'dsfdsfsdf' }
Run Code Online (Sandbox Code Playgroud)
会成为:
{ 'a' : 'dsfdsfsdf', 'b' : 'asdsad', 'c' : 'masdas' }
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个用node.js编写的websocket服务器
为了使服务器工作,我需要获取字符串的SHA1哈希值.
我需要做的是在文档的第5.2.2节第35页中解释.
注意:例如,如果
"Sec-WebSocket-Key"客户端握手中的标头值为"dGhlIHNhbXBsZSBub25jZQ==",则服务器会附加字符串"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"以形成字符串"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11".然后服务器将获取该字符串的SHA-1哈希值,给出值0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6 0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea.然后对该值进行base64编码,以提供"s3pPLMBiTxaQ9kYGzzhZRbK+xOo="将在"Sec-WebSocket-Accept"标头中返回的值.
我一直在寻找一段时间,想要一种方法来对这样的Javascript对象进行排序:
{
method: 'artist.getInfo',
artist: 'Green Day',
format: 'json',
api_key: 'fa3af76b9396d0091c9c41ebe3c63716'
}
Run Code Online (Sandbox Code Playgroud)
并按名称按字母顺序排序得到:
{
api_key: 'fa3af76b9396d0091c9c41ebe3c63716',
artist: 'Green Day',
format: 'json',
method: 'artist.getInfo'
}
Run Code Online (Sandbox Code Playgroud)
我找不到任何可以执行此操作的代码.谁能给我一些帮助?
不保证非数组对象的属性按任何特定顺序进行字符串化.不要依赖于字符串化内同一对象内的属性排序.
我曾希望通过缓存对象的字符串化版本来确定对象是否已更改,然后将其与随后的字符串化对象版本进行比较.这似乎比递归迭代对象并进行比较要简单得多.问题是因为JSON.stringify函数不是确定性的,所以当我对同一个对象进行字符串化时,我可以在技术上得到一个不同的字符串.
我还有其他选择吗?或者我是否必须编写令人讨厌的比较函数来确定对象相等性?
我需要一个功能:
function isSame(a, b){
}
Run Code Online (Sandbox Code Playgroud)
其中,如果a和b相同,则返回true.
,我试过return a === b,但我发现[] === []会返回false.
我期望这个功能的一些结果可以给出:
isSame(3.14, 3.14); // true
isSame("hello", "hello"); // true
isSame([], []); // true
isSame([1, 2], [1, 2]); // true
isSame({ a : 1, b : 2}, {a : 1, b : 2}); //true
isSame([1, {a:1}], [1, {a:1}]); //true
Run Code Online (Sandbox Code Playgroud) 场景:考虑我有一个JSON文档如下:
{
"name": "David",
"age" : 78,
"NoOfVisits" : 4
}
Run Code Online (Sandbox Code Playgroud)
问题:我想改变文档中字段的顺序/顺序,比如我想要age,NoOfVisits然后最后name.
截至目前,我将值存储在临时变量中,删除字段并重新创建相同的字段.由于重新分配不起作用:(
我是按照以下方式做到的:
temp = doc["age"];
delete doc['age'];
doc["age"] = temp;
temp = doc["NoOfVisits "];
delete doc['NoOfVisits '];
doc["NoOfVisits"] = temp;
temp = doc["name"];
delete doc['name'];
doc["name"] = temp;
Run Code Online (Sandbox Code Playgroud)
这样我就可以获得所需的有序JSON文档.这个要求是特殊的,但我仍然需要一些有效的解决方案
问题:有人可以用有效的方法帮助实现同样的目标吗?
我在尝试从可观察流中删除属性时遇到了难以置信的困难。我有一个可观察的对象,它在 url ( Angular ActivatedRoute.queryParams) 中发出查询参数对象。我试图从发出的值中删除键和值并调用,distinctUntilChanged()以便它们的更改不会触发我的观察者。
允许pluck()您仅允许流中的一个参数通过,filter()允许您过滤整个流,skip()运算符允许您跳过整个流排放,throttle()以限制排放量。尽管做相反的事情pluck()- 您希望允许流中除一个值之外的所有值通过 - 并不存在。最接近完成它的是一个map(),它创建一个新对象,删除属性,然后返回该新对象,但这充其量是有问题的,而且通常不起作用。
除了我试图忽略的属性之外,我已采取为所有查询参数属性创建单独订阅的方法。我想必须有一个更好的方法来解决这个问题,是否有一些我缺少或解决的神奇操作符?当类似的东西存在时,为什么反应式库中缺少如此明显的运算符pluck()?
编辑:
代码:
this.activatedRoute.queryParams
.map((value) => {
const newObj = Object.assign({}, value);
delete newObj['page'];
return newObj;
})
.distinctUntilChanged()
.skip(1)
.subscribe(
(value) => console.log(value)
);
Run Code Online (Sandbox Code Playgroud)