比较两个对象数组,然后用另一个替换对象

D

我有一个工作函数,将一个对象数组追加customData到另一个对象数组的末尾testData如果name在两个数组中都出现具有相同属性值的testData对象,则该对象将被删除并替换customData为结果数组中对象。customData对象采用上一个testData对象的顺序

但是,这是我的尝试,我想知道是否有更好的方法可以轻松读取(es6)?

谢谢

https://codesandbox.io/s/recursing-river-bdp5k?file=/src/App.js

export default function App() {
  const testData = [
    { display: "1", name: "TEST1" },
    { display: "2", name: "TEST2" }
  ];

  const customData = [
    { display: "CUSTOM_1", name: "TEST1", custom: "YES" },
    { display: "CUSTOM_3", name: "TEST3", custom: "YES" }
  ];

  let i = 0;
  const newTestData = testData;
  let newCustomData = customData;

  while (i < customData.length) {
    const view = customData[i];
    const index = testData.findIndex(x => x.name === view.name);

    if (index >= 0) {
      newTestData[index] = customData[i];
      newCustomData.splice(i, 1);
    }
    i += 1;
  }

  const concatData = newTestData.concat(newCustomData);
  console.log(concatData)

  return null;
}
克莱康

Array#concat不会使数组发生变化,因此无需将它们分配给新变量(无论如何也不会复制数组)。如果您想使用简洁的ES6代码,请跳过while循环-有许多等效项。这是一个例子:

您没有定义“更好的方式”,但我将其解释为“针对性能和可读性进行了最优化”。在下面的方法中,我使用一次通过来填充地图,另一次使用customData在需要的地方覆盖地图条目,最后使用一次Object.values()(技术上第三次)来生成结果。与您的O(n ^ 2)实现相比,这是O(n)(无嵌套循环)。

const testData = [
  { display: "1", name: "TEST1" },
  { display: "2", name: "TEST2" }
];

const customData = [
  { display: "CUSTOM_1", name: "TEST1", custom: "YES" },
  { display: "CUSTOM_3", name: "TEST3", custom: "YES" }
];

let map = {};
testData.forEach(item => map[item.name] = item);
customData.forEach(item => map[item.name] = item);
const result = Object.values(map);

console.log(result);

在很多情况下(包括该情况),您有一堆由唯一键(例如name标识的数据,您确实应该使用对象作为开始。任何时候需要数组时,都有Object.values()Object.keys()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

比较两个大的csv文件,然后用python编写另一个

来自分类Dev

如何比较两个对象数组并将信息放入另一个对象数组?

来自分类Dev

比较两个数组并将对象添加到另一个数组

来自分类Dev

在另一个对象数组中转换对象数组?

来自分类Dev

两个对象数组需要根据另一个键过滤一个对象

来自分类Dev

根据另一个对象数组替换键

来自分类Dev

相交两个对象数组,然后从两个对象数组创建一个新数组

来自分类Dev

根据一个对象键和另一个对象值与对象进行比较,然后使用map函数将结果推入新数组?

来自分类Dev

如何从两个不同的数组中找到公共对象并打印另一个对象?

来自分类Dev

比较两个数组,然后再在JavaScript中将一个数组中的项添加到另一个数组中

来自分类Dev

代码前两个对象与另一个对象

来自分类Dev

链接两个对象并使另一个对象相互关联

来自分类Dev

使用PHP,按键搜索一个数组,然后用匹配键中的值替换另一个数组中的值

来自分类Dev

将数组/对象键值替换为另一个数组/对象javascript的键值

来自分类Dev

用 JavaScript 中另一个数组对象的数据替换数组中的对象

来自分类Dev

匹配字段中的模式,然后用另一个替换该字段

来自分类Dev

遍历对象数组与另一个对象数组

来自分类Dev

如何将对象参数与另一个对象参数(数组内部)进行比较

来自分类Dev

从JavaScript中的另一个对象数组替换一个对象数组的值

来自分类Dev

比较两个对象忽略一个键

来自分类Dev

比较对象与扩展第一个对象的另一个对象

来自分类Dev

为什么将一个对象的值分配给另一个对象的值,然后重新分配原始对象又会更改两个对象?

来自分类Dev

将对象数组与另一个数组循环函数进行比较

来自分类Dev

合并多个数组(对象)并与另一个数组进行比较

来自分类Dev

使用下划线比较两个对象并用一个对象替换公共值

来自分类Dev

比较两个数组的元素以及元素是否匹配然后在某些条件下修改另一个数组值的问题

来自分类Dev

Java - 迭代两个列表,比较然后添加到另一个列表

来自分类Dev

python 比较两个文本文件,然后将输出打印到另一个文件

来自分类Dev

在数组中比较:如果存在两个最大值,则比较另一个值

Related 相关文章

  1. 1

    比较两个大的csv文件,然后用python编写另一个

  2. 2

    如何比较两个对象数组并将信息放入另一个对象数组?

  3. 3

    比较两个数组并将对象添加到另一个数组

  4. 4

    在另一个对象数组中转换对象数组?

  5. 5

    两个对象数组需要根据另一个键过滤一个对象

  6. 6

    根据另一个对象数组替换键

  7. 7

    相交两个对象数组,然后从两个对象数组创建一个新数组

  8. 8

    根据一个对象键和另一个对象值与对象进行比较,然后使用map函数将结果推入新数组?

  9. 9

    如何从两个不同的数组中找到公共对象并打印另一个对象?

  10. 10

    比较两个数组,然后再在JavaScript中将一个数组中的项添加到另一个数组中

  11. 11

    代码前两个对象与另一个对象

  12. 12

    链接两个对象并使另一个对象相互关联

  13. 13

    使用PHP,按键搜索一个数组,然后用匹配键中的值替换另一个数组中的值

  14. 14

    将数组/对象键值替换为另一个数组/对象javascript的键值

  15. 15

    用 JavaScript 中另一个数组对象的数据替换数组中的对象

  16. 16

    匹配字段中的模式,然后用另一个替换该字段

  17. 17

    遍历对象数组与另一个对象数组

  18. 18

    如何将对象参数与另一个对象参数(数组内部)进行比较

  19. 19

    从JavaScript中的另一个对象数组替换一个对象数组的值

  20. 20

    比较两个对象忽略一个键

  21. 21

    比较对象与扩展第一个对象的另一个对象

  22. 22

    为什么将一个对象的值分配给另一个对象的值,然后重新分配原始对象又会更改两个对象?

  23. 23

    将对象数组与另一个数组循环函数进行比较

  24. 24

    合并多个数组(对象)并与另一个数组进行比较

  25. 25

    使用下划线比较两个对象并用一个对象替换公共值

  26. 26

    比较两个数组的元素以及元素是否匹配然后在某些条件下修改另一个数组值的问题

  27. 27

    Java - 迭代两个列表,比较然后添加到另一个列表

  28. 28

    python 比较两个文本文件,然后将输出打印到另一个文件

  29. 29

    在数组中比较:如果存在两个最大值,则比较另一个值

热门标签

归档