【问题标题】:Facing problem while comparing two javaScript array along with values [duplicate]比较两个javascript数组和值时面临问题[重复]
【发布时间】:2020-07-15 07:38:51
【问题描述】:

var obj1 = { key1: 'value1', key2: 'value2', key3: [] },
    obj2 = { key1: 'value1', key2: 'someOtherValue', key3: [] },
    map = new Map();

Object.keys(obj1).forEach(k => map.set(k, obj1[k]));
Object.keys(obj2).forEach(k => map.get(k) !== obj2[k] && console.log(k + ' is different'));

我从 how to compare two javascript array using angular.foreach 但在我的场景中还需要在地图中添加数组,所以请帮我解决这个问题。 谢谢。

【问题讨论】:

  • 那么到底是什么问题?
  • 在两个对象中 key3 值相同('[]'),但在控制台中它变得不同。
  • 它不一样,它们可能都没有元素但它们不一样
  • 这能回答你的问题吗? How to compare arrays in JavaScript?
  • 是的,但是我如何检查两者没有元素差异

标签: javascript angularjs foreach


【解决方案1】:

您可以对值进行字符串化以获得可比较的值。

原始代码使用原始类型检查值。通过使用对象,对象引用用于检查。如果你有两个不同的数组,你就有两个不同的对象引用。

var obj1 = { key1: 'value1', key2: 'value2', key3: [] },
    obj2 = { key1: 'value1', key2: 'someOtherValue', key3: [] },
    map = new Map();

Object.keys(obj1).forEach(k => map.set(k, obj1[k]));
Object.keys(obj2).forEach(k => {
    const value = map.get(k);
    if (value !== obj2[k] && JSON.stringify(value) !== JSON.stringify(obj2[k])) {
        console.log(k + ' is different');
    }
});

【讨论】:

  • 只有在数组的值被支持的情况下才有效,例如undefinedfunction(){}Symbol('')nullJSON.stringify期间都将被转换为空值,集合和映射将也可以转化为物体
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2013-02-02
  • 2021-06-14
  • 2014-12-08
  • 1970-01-01
相关资源
最近更新 更多