小编Mar*_*sen的帖子

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

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

如何知道何时应用了font-face

我目前正在为广泛使用自定义字体的客户构建公司网站.

在jQuerys DOM-ready上我正在进行位置计算,以确定应根据动态内容放置一些具有动态宽度和高度的弹出菜单.

这些计算失败,因为在应用font-face之前触发了DOM-ready,因此宽度和高度不正确.

现在(对于原型)我在DOM准备好500ms后进行计算以缓解这个问题,但由于显而易见的原因,这不能投入生产.

在最新的Firefox和Chrome中已经出现了这个问题.IE 8似乎没有问题,但是随后DOM-ready起火相当晚,所以延迟是内置的我猜:)

等待加载事件不是一个选项,所以我的问题是:

是否有可靠的跨浏览器方式来检测何时应用了font-face?

javascript jquery font-face domready

31
推荐指数
2
解决办法
7130
查看次数

如何将溢出的div滚动到certaing#标签(锚点)?

在我的网页上,我有一个溢出的div(即垂直滚动条).在div里面,我有ids的锚点.当我在URL(mypage.html#id)中放入其中一个ID时,我希望div而不是页面滚动到该锚点.

我该怎么做,最好使用纯JavaScript?如果它太复杂了,我将使用jQuery,但我不会在这个项目中使用它来做任何事情.

javascript anchor hashtag

8
推荐指数
2
解决办法
9741
查看次数

Google Maps API热图图层 - 单个渐变,两个极端

假设我以通常的方式设置了Google热图图层:

  heatmap = new google.maps.visualization.HeatmapLayer({
    radius: 20,
    opacity: 0.5,
    gradient: g
  });

  heatmap.setMap(map);
Run Code Online (Sandbox Code Playgroud)

哪里:

  var g = [
    'rgba(255, 0, 0, 1)',
    'rgba(255, 255, 0, 0.9)',
    'rgba(0, 255, 0, 0.7)',
    'rgba(173, 255, 47, 0.5)',
    'rgba(152, 251, 152, 0)',
    'rgba(152, 251, 152, 0)',
    'rgba(0, 0, 238, 0.5)',
    'rgba(186, 85, 211, 0.7)',
    'rgba(255, 0, 255, 0.9)',
    'rgba(255, 0, 0, 1)'

]
Run Code Online (Sandbox Code Playgroud)

我正在热映射的事情取0到1的范围.我想显示一个热点,接近0和接近1的值和接近0.5的中性(冷)点.这就是为什么我有更高的不透明度接近该g变量的开头和结尾.

问题是热图图层将NO数据解释为0,因此将地图的空白区域热映射为红色.我想要的是0和1附近的数据是红色的,没有数据的区域是单独的.

有什么建议?

google-maps heatmap google-maps-api-3

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