需求是 a数组减去b数组里存在的数据,得到新数据 查询文档得知
difference_.difference(array, *others)
类似于without,但返回的值来自array参数数组,并且不存在于other 数组.
_.difference([1, 2, 3, 4, 5], [5, 2, 10]); => [1, 3, 4]
继而的得到提示 将需求里的数据对象转换为字符串即可 直接对比数组里的对象是不可以的 必须转换为字符串 具体实现如下
var _=require('underscore') ; var ret=[{a:1,b:1,c:1},{a:1,b:1,c:2},{a:2,b:1,c:1},{a:1,b:1,c:1},{a:1,b:1,c:0}] var c= _.map(ret,function(data, key) { return JSON.stringify(data) } ) var ret1=[{a:1,b:1,c:1},{a:2,b:1,c:1}] var c1= _.map(ret1,function(data, key) { return JSON.stringify(data) } ) var ret2=_.difference(c, c1);
得到结果
/usr/local/bin/node un.js [ '{"a":1,"b":1,"c":2}', '{"a":1,"b":1,"c":0}' ]
其实还有一种情况是 数组a 和数组b 数据类型不一样 这个时候就要想办法转换
var _=require('underscore') ; var ret=[{a:1,b:1,c:1},{a:2,b:1,c:2},{a:3,b:1,c:1},{a:4,b:1,c:1},{a:5,b:1,c:0}] var ret1=[{a:"1"},{a:"2"}] var ret2=[] ; var saveMysql=_.indexBy(ret,'a') ; //得到唯一key 的值 var saveMongo=_.indexBy(ret1,'a') ;// 要对比的格式 console.log('saveMysql',saveMysql); console.log('saveMongo',saveMongo) ; var differenceMysql = _.difference(_.keys(saveMysql), _.keys(saveMongo)); //key值相差 var ret3=_.map(differenceMysql,function(senderKey){ return saveMysql[senderKey] ; }) //得到相差的数组 console.log('相差的数组',ret3) ;
执行结果
saveMysql { '1': { a: 1, b: 1, c: 1 }, '2': { a: 2, b: 1, c: 2 }, '3': { a: 3, b: 1, c: 1 }, '4': { a: 4, b: 1, c: 1 }, '5': { a: 5, b: 1, c: 0 } } saveMongo { '1': { a: '1' }, '2': { a: '2' } } 相差的数组 [ { a: 3, b: 1, c: 1 }, { a: 4, b: 1, c: 1 }, { a: 5, b: 1, c: 0 } ]
你打算打赏多少钱呢?
(微信扫一扫)