Javascript 如何优化两个对象数组的合并?
我想针对Javascript 如何优化两个对象数组的合并?,javascript,arrays,performance,Javascript,Arrays,Performance,我想针对CPU和memory消耗优化我的代码。在我的函数中,我需要将两个对象数组合并为一个数组。与UNION类似,数组中对象的所有ids必须是唯一的。我不想使用第三方库,如下划线 这是我的功能: var presentation_slides = [ { "id": "2", "type": "results" }, { "id": "1", "type": "slide" }, { "id": "4", "type": "qu
CPU
和memory
消耗优化我的代码。在我的函数中,我需要将两个对象数组合并为一个数组。与UNION
类似,数组中对象的所有id
s必须是唯一的。我不想使用第三方库,如下划线
这是我的功能:
var presentation_slides = [
{
"id": "2",
"type": "results"
},
{
"id": "1",
"type": "slide"
},
{
"id": "4",
"type": "questions"
}]
for(var i = 0; i < new_length; i++) {
var my_slide = presentation_slides.filter(function (obj) { return obj.id == i })[0]
if(!my_slide) {
presentation_slides.push({"id": i, "type": "slide"});
}
}
var presentation_slides = [
{
"id": "2",
"type": "results"
},
{
"id": "1",
"type": "slide"
},
{
"id": "4",
"type": "questions"
},
{
"id": 0,
"type": "slide"
},
{
"id": 3,
"type": "slide"
}]
谢谢大家!
编辑:
var presentation_slides = [
{
"id": "2",
"type": "results"
},
{
"id": "1",
"type": "slide"
},
{
"id": "4",
"type": "questions"
}]
for(var i = 0; i < new_length; i++) {
var my_slide = presentation_slides.filter(function (obj) { return obj.id == i })[0]
if(!my_slide) {
presentation_slides.push({"id": i, "type": "slide"});
}
}
var presentation_slides = [
{
"id": "2",
"type": "results"
},
{
"id": "1",
"type": "slide"
},
{
"id": "4",
"type": "questions"
},
{
"id": 0,
"type": "slide"
},
{
"id": 3,
"type": "slide"
}]
一些比较测试:您可以使用
Some
而不是filter
,我在您的jsperf
中添加了一个code-snipet
,它更快
选中此项:
for(变量i=0;i
如果您只想合并两个数组,那么可以使用Array.concat()
:
array3
将包含array1
和array2
中的所有元素
但这不会检查ID是否唯一。此外,反向循环的速度要快一些:
var i = new_length;
while (i--) {
if (!presentation_slides.some(function(obj) { return obj.id == i })) {
presentation_slides.push({ "id": i, "type": "slide" });
}
}
检查这个也许是个愚蠢的问题,但数组的来源是什么?服务器端可以解决这个问题吗?在您的代码中,我只看到一个数组,您可以在其中添加新对象,也许可以用更准确的代码重写您的问题?谢谢,但它必须是唯一的。这就是我提到union的原因。@KamilMaraz我明白了-我不理解union-我一定不熟悉它的原始编程语言。@KamilMaraz没问题:)非常好!我需要检查
.filter()
和.some()
!这个概念我已经尝试过很多次了,但在chrome中却很少出现这种情况。根据我的经验,即使在您创建的jsperf测试中,反向循环也会变慢。是的!!!!!,当我被添加并运行jsperf的反向循环时,速度稍微快了一点,但现在,速度稍微慢了一点。。。但我认为反向循环
要快一点:Di再次运行,这次反向循环
要快一点,我拍了一张屏幕截图。。。检查这个:我认为V8无论如何都会优化它。。。选中此项: