首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Javascript中合并对象的本机方法

在Javascript中合并对象的本机方法
EN

Stack Overflow用户
提问于 2011-01-20 05:10:51
回答 6查看 22.8K关注 0票数 48

Javascript的对象没有任何本机合并操作。如果你有两个对象,比如说

代码语言:javascript
复制
{a:1, b:2}
{c:3, d:4}

并且想要得到

代码语言:javascript
复制
{a:1, b:2, c:3, d:4}

据我所知,您必须遍历对象。也就是说,您决定使用merge left或merge right策略,然后执行以下操作(简化)

代码语言:javascript
复制
for (key in object2) {
  object1[key] = object2[key];
}

这很好。但是,Javascript具有callprototype功能。例如,可以使用以下命令将arguments转换为Array

Array.prototype.slice.call(arguments)

这种方法利用了现有的本机代码,因此不容易受到程序员愚蠢行为的影响,并且应该比非本机实现运行得更快。

问题是

在DOM的AttributeNode遍历特性上,或者在一些通用的String函数上使用这种原型/调用模式,以便进行本机对象合并,有什么技巧吗?

代码将如下所示:

var merged = somethingrandom.obscuremethod.call(object1, object2)

因此,您可以在没有遍历的情况下获得本机合并。

一个可能的、次优的解决方案

如果您可以使用Objectconstructor属性,然后强制一个对象具有另一个对象的构造函数,然后在复合对象上运行new,则可以免费获得合并。但是我不能很好地理解javascript中constructor特性的全部含义,无法做出这样的调用。

引理

同样的问题也适用于Arrays。一个常见的问题是,假设有7个数字数组,然后尝试找出这些数组的交集。也就是说,哪些数字在所有7个数组中都存在。

您可以将它们连接在一起,然后进行排序,然后进行遍历。但如果有一个通用的交集隐藏在某个地方,我们可以强制一个数组在本地执行,那就太好了。

有什么想法吗?

编辑:

半途而废

对于数组问题,您可以执行以下操作:

array.concat(a,b,c).sort().join(':'),然后使用一些棘手的RegExp捕获和重复模式来遍历。如果您不了解RegExp实现,可以在一个非常简单的基于堆栈的虚拟机上运行。当您初始化正则表达式时,这实际上是一个需要编译的程序(RegExp.compile是一个已弃用的JS方法)。然后,本机以极快的速度遍历字符串。也许你可以利用这一点作为会员阈值,并获得更好的性能……

尽管如此,它仍然没有走完所有的路。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4740806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档