小编str*_*ing的帖子

如何从JavaScript对象创建校验和?

我需要从JavaScript对象创建校验和.
不幸的是,由于JavaScript的对象排序,似乎没有一种简单的方法可以实现这一点.例如,取这些对象:

var obj1 = {type:"cake",quantity:0}
  , obj2 = {quantity:0,type:"cake"};
Run Code Online (Sandbox Code Playgroud)

我认为这些对象在数据上是相同的,并且希望它们的校验和是相同的.只要它们中的数据相同,我就真的不关心Object的顺序.
唉,JSON.stringify两者实际上并不相同; 作为对象的校验和的唯一方法是通过它的String表示,并且JSON.stringify-ed表示不相等,我的校验和将不相等!
我提出的一个解决方案是基于预定义的模式重新创建Object,如下所示:

var schema = ["type","quantity"];
function sortify(obj,schema){
  var n={};
  for(i in schema)
    n[schema[i]]=obj[schema[i]];
  return n
}
Run Code Online (Sandbox Code Playgroud)

运行JSON.stringify(sortify(obj1,schema))==JSON.stringify(sortify(obj2,schema))将返回true...但是以创建新对象并在数据周围移动为代价.

我的另一个解决方案是将JSON.stringify方法替换为从预定义模式中选择键并对其值进行字符串化,然后将它们连接在一起的方法.功能如下:

function smarterStringify(obj,schema){
  var s="";
  for(i in schema)
    s+=JSON.stringify(obj[schema[i]]);
  return s
}
Run Code Online (Sandbox Code Playgroud)

忽略这个方法没有返回正确的JSON(它足够接近作为我正在尝试做的一个例子)这一事实,它比速度上的第一个提升了很多(至少在我的Chrome OS浏览器中,你可以在这里自己检查:http://jsperf.com/sort-then-json-stringify-vs-smarter-stringify),当然它使两个Object String表示相等!

但是,我只是想知道我是否遗漏了某些东西并且有一个内置的方法,这样的事情一直没有a)驱动JavaScript GC进入病态案例或b)做太多的字符串连接.我宁愿不做那些.

javascript json checksum adler32

7
推荐指数
3
解决办法
1万
查看次数

如何在保持相同尺寸的同时允许柔性物品生长?

Flexbox是网页设计师所希望的最酷工具之一.不幸的是,有时我不应该立即明白我应该做什么.举例来说,这个插头.我希望扩展项目以填充行,而不是在最后一行中一直扩展.
我的CSS包含这些重要的东西:

.recipe-picker recipe {
    -webkit-flex: 0 1 8em;
    flex: 0 1 8em;

    height: 12em;
}
Run Code Online (Sandbox Code Playgroud)

如果我将更0改为任何正数(对应于flex-grow属性),则最后一个项目行将以超级丑陋的方式拉伸.其余的项目表现相当不错,但最后一行应保持与其他项目相同的大小.
我该怎么做才能解决这个问题?

css flexbox

6
推荐指数
1
解决办法
2827
查看次数

标签 统计

adler32 ×1

checksum ×1

css ×1

flexbox ×1

javascript ×1

json ×1