我有两个对象:oldObj和newObj.
数据oldObj用于填充表单,newObj是用户更改此表单中的数据并提交数据的结果.
两个对象都很深,即.它们具有对象或对象数组等属性 - 它们可以是n级深度,因此diff算法需要是递归的.
现在我需要不只是从弄清楚什么改变(如添加/更新/删除)oldObj来newObj,却怎么也最能代表它.
到目前为止,我的想法只是构建一个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'}
当我们得到数组的属性时,它会变得非常毛茸茸,因为数组[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)
检查这种类型的深度值相等不仅非常复杂,而且还要找出一种表示可能的变化的好方法.
我目前正在为广泛使用自定义字体的客户构建公司网站.
在jQuerys DOM-ready上我正在进行位置计算,以确定应根据动态内容放置一些具有动态宽度和高度的弹出菜单.
这些计算失败,因为在应用font-face之前触发了DOM-ready,因此宽度和高度不正确.
现在(对于原型)我在DOM准备好500ms后进行计算以缓解这个问题,但由于显而易见的原因,这不能投入生产.
在最新的Firefox和Chrome中已经出现了这个问题.IE 8似乎没有问题,但是随后DOM-ready起火相当晚,所以延迟是内置的我猜:)
等待加载事件不是一个选项,所以我的问题是:
是否有可靠的跨浏览器方式来检测何时应用了font-face?
在我的网页上,我有一个溢出的div(即垂直滚动条).在div里面,我有ids的锚点.当我在URL(mypage.html#id)中放入其中一个ID时,我希望div而不是页面滚动到该锚点.
我该怎么做,最好使用纯JavaScript?如果它太复杂了,我将使用jQuery,但我不会在这个项目中使用它来做任何事情.
假设我以通常的方式设置了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附近的数据是红色的,没有数据的区域是单独的.
有什么建议?
javascript ×3
anchor ×1
compare ×1
domready ×1
font-face ×1
google-maps ×1
hashtag ×1
heatmap ×1
jquery ×1
object ×1