lodash /下划线; 比较两个对象并删除重复项

num*_*web 4 javascript json object underscore.js lodash

正如你在下面的图片中看到的,我有一些返回的json data有三个对象; 每个包含客户端id =>数据.

返回json数据

exact_match : {104}
match_4 :  {104, 103}
match_2 :  {104, 103, 68}
Run Code Online (Sandbox Code Playgroud)

如何根据之前的"修剪"或删除重复的对象?就像是:

exact_match : {104}
match_4 :  {103}
match_2 :  {68}
Run Code Online (Sandbox Code Playgroud)

我尝试了_.difference但没有工作(也许是因为它是数组而不是对象?):

var exact_match = data.exact_match,
    match_four_digits = _.difference(data.match_4, data.exact_match),
    match_two_digits = _.difference(data.match_2, data.exact_match, data.match_4),
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激 :)

更新

我需要返回的值具有相同的对象数据而不是新的数组:)

Jon*_*ard 8

它看起来像你想要扩散键(或者更确切地说,它是有效的 - _.keys)

_.difference(
  _.keys({104: 1, 102: 3, 101: 0}), // ["104", "102", "101"]
  _.keys({104: 1, 102: 3}) // ["104", "102"]
)
// [ "101" ]
Run Code Online (Sandbox Code Playgroud)

或者,如果要在对象中进行比较,也可以将对象转换为对数组(_.pairs):

_.difference(
  _.pairs({104: 1, 102: 3, 101: 0}), // [["104",1], ["102",3], ["101",0]]
  _.pairs({104: 1, 102: 2}) // [["104",1], ["102",2]]
)
// [["102", 3], ["101", 0]]
Run Code Online (Sandbox Code Playgroud)


num*_*web 1

谢谢你们的回答,我真的很感谢你们的时间。

我进一步搜索,发现Lodash 开发人员发表的这篇文章帮助我想出了这个片段;

var data = {
  exact_match: {
    104: {
      supplier_id: 104
    }
  },
  match_four_digits: {
    104: {
      supplier_id: 104
    },
    68: {
      supplier_id: 68
    }
  },
  match_two_digits: {
    104: {
      supplier_id: 104
    },
    68: {
      supplier_id: 68
    },
    103: {
      supplier_id: 103
    },
    999: {
      supplier_id: 999
    }
  }
};

var arr_match_four_digits = _.difference(_.keys(data.match_four_digits), _.keys(data.exact_match));
var arr_match_two_digits = _.difference(_.keys(data.match_two_digits), _.keys(data.match_four_digits), _.keys(data.exact_match));



$('#output1').html(JSON.stringify(data));
$('#output2').html(JSON.stringify(_.pick(data.match_four_digits, arr_match_four_digits)));
$('#output3').html(JSON.stringify(_.pick(data.match_two_digits, arr_match_two_digits)));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.rawgit.com/lodash/lodash/3.3.1/lodash.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

data
<pre><code><div id="output1"></div></code></pre>
arr_match_four_digits
<pre><code><div id="output2"></div></code></pre>
match_two_digits
<pre><code><div id="output3"></div></code></pre>
Run Code Online (Sandbox Code Playgroud)