我有一个这样的对象数组:
array1 = [
{field: 'username', display: 'username', hide: true},
{field: 'age', display: 'Age', hide: true},
{field: 'height', display: 'Height', hide: true}
]
然后我有array2:
array2 = [
{field: 'username', display: 'username 123', hide: false},
{field: 'age', hide: false}
]
我想通过它们的字段合并这两个数组,即最终结果应该是:
array3 = [
{field: 'username', display: 'username 123', hide: false},
{field: 'age', display: 'Age', hide: false},
{field: 'height', display: 'Height', hide: true}
]
我尝试过,var newObj = _.extend(array1, array2);
但没有给我想要的东西。
没有一项功能可以完成它,因为它是一项相当专业的操作。但是,下划线功能相当简单:
_.values(_.extend(_.indexBy(array1, 'field'), _.indexBy(array2, 'field')))
我们通常使用indexBy
将数组转换为键入该field
值的对象,然后extend
执行所需的操作。最后,values
将其变回数组。
请注意,尽管这不能保证顺序,但在当前_
和v8实现中,最终数组将是array1
后面的东西,array2
然后是不在后面的东西,并按array1
每个数组的原始顺序排序。
还要注意,该_.extend
函数在第一个参数上具有破坏性,而这不会更改任何一个数组。
如果要确保订单与原始订单相同array1
:
order = _.object(_.map(array1, function(obj, i) { return [obj.field, i]; }))
_.sortBy(_.values(_.extend(_.indexBy(array1, 'field'), _.indexBy(array2, 'field'))), function(obj) { order[obj.field]; })
在这里,我们创建一个位置查询表,然后根据该查询表对原始解决方案进行排序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句