【问题标题】:Compare JSON array and JSON object and find Difference比较 JSON 数组和 JSON 对象并找出差异
【发布时间】:2020-02-25 17:15:32
【问题描述】:

我有一个 JSON 数组和 JSON 对象(它是字符串),我想比较并从两者中找到不同的字段。

我尝试了以下可能性并将 o/p 设为:

JSON 响应如下:

-------rule_before
 RowDataPacket {
  id: 75,
  input: 'day_of_week',
  input_data: '0,1',
  condition: 'in',
  status: 'active',
  extra_fields: '' }

-------filter_before
 RowDataPacket {
  id: 74,
  when: 'match',
  output: 'assign_department',
  output_data: '3,1',
  output_data_json: '',
  status: 'active' }

-------rule_after
 { input: 'page_title',
  input_data: 'Home',
  extra_fields: '',
  condition: 'match',
  status: 'active' }

-------filter_after
 { when: 'match',
  output: 'assign_agent',
  output_data: '1',
  output_data_json: '',
  status: 'active' }

let rule_before = rule_data;
let filter_before = filter_data;
let rule_after = JSON.parse(request_data.rules);
let filter_after = JSON.parse(request_data.filters);
rule_before = rule_before[0];
filter_before = filter_before[0];
rule_after = rule_after[0];
filter_after = filter_after[0];

console.log("\n-------rule_before\n", rule_before);
console.log("\n-------filter_before\n", filter_before);
console.log("\n-------rule_after\n", rule_after);
console.log("\n-------filter_after\n", filter_after);

我想要这样的区别

对于规则:输入:'day_of_week' => input_data:'Home' for filter: when: 'match' => when: 'match'

【问题讨论】:

标签: javascript arrays node.js json


【解决方案1】:

我不太确定您要做什么,但如果您想获得两个对象的所有匹配项,请尝试下面的简单函数。

function diff(obj1, obj2) {
      // Check if the Parameters are actually Objects
      if (!(typeof(obj1) === "object" || typeof(obj2) === "object"))
        return false

      // Create arrays out of the Objects
      const arr1 = Object.entries(obj1)
      const arr2 = Object.entries(obj2)
      // Instantiate an array with the matches
      let result = []

      arr1.forEach(el1 => {
        arr2.forEach(el2 => {
          // Check if it matches
          if (el1[0] === el2[0] && el1[1] === el2[1]) {
            // Add the match to the result
            result.push(el1[1])
          }
        })
      })

      // Return the matches
      return result
    }

PS:如果您有嵌套对象,此功能将不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多