Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何优化两个对象数组的合并?_Javascript_Arrays_Performance - Fatal编程技术网

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无论如何都会优化它。。。选中此项: